c# - LINQ 中的第二个 "from"语句

标签 c# linq

我是 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/

相关文章:

c# - 为类中的 int 元素覆盖 ToString()

c# - 如何创建具有动态对象类型的通用列表

c# - 如何从此方法返回 Dictionary<string,Dictionary<int,decimal>> ?

c# - 扩展方法语法与查询语法

c# - 模拟管理系统?

javascript - 如何以与 JavaScript 的 .toString(36) 相同的方式在 C# 中将 float 转换为 Base36

c# - 带参数的自定义 Icomparer

c# - C# 使用表达式树生成分组后带有求和的 select 语句

c# - ExecuteSqlCommand并行执行

c# - NHibernate 3.0 IQueryable<T> 完全支持哪些 linq 函数