我是 LINQ 的新手,我对该库的了解来自 Jon Skeet 的书“C# In Depth 1”
过去几天我读了很多关于 LINQ 的教程,包括 Skeet 的书,但我永远找不到显示正常 C# 代码的代码片段,以及该代码与 LINQ 的较短版本,以便读者可以理解什么是什么。
我的问题: 下面的函数打开一个文本文件,并搜索放置在文本文件内特定位置的数字。数字(我在代码中使用了 ID)从 1 到 25000 开始,有一些缺失(例如没有生命) 25,但 24、23、26、27 等)。 我希望代码复制数组“Ids”中的行。它并不意味着是一个数组,我只是新来的,我不知道是否还有其他方法对 LINQ 更方便。
public static IEnumerable<string> ReadLines(StreamReader reader)
{
while (!reader.EndOfStream)
{
yield return reader.ReadLine();
}
}
static void Filter(string filename)
{
using(var writer = File.CreateText(Application.StartupPath + "\\temp\\test.txt"))
{
using (var reader = File.OpenText(filename))
{
int[] Ids = { 14652, 14653, 14654, 14655, 14656, 14657, 14658, 14659, 14660 };
var myId = from id in Ids
from line in ReadLines(reader)
let items = line.Split('\t')
where items.Length > 1
let ItemId = int.Parse(items[1])
where ItemId == id
select line;
foreach (var id in myId)
{
writer.WriteLine(id);
}
}
}
}
它写的是什么:它只写一行数字,它是Ids[]数组的第一个成员(14652)。
我必须添加第二个“from”,它被放置在代码中的第一个位置,这样它将检查数组的每个成员。我将 from 语句作为“while”得到,因为我不能找到一个带有普通代码的snipper -> linq。
代码哪里出了问题?
最佳答案
from line in ReadLines(reader)
where Ids.Contains(line.Split('\t')[1])
select line;
您可以使用 ? 调整包含绕过 1 处没有项目的拆分。
这就是你想要做的吗?我认为第二个就像交叉连接,因为我理解你的问题,这是没有必要的。
关于c# - LINQ 中的第二个 "from"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898923/