C# 如何在LINQ中检查列表

C# 如何在LINQ中检查列表,c#,linq,C#,Linq,我正在尝试使用LINQ读取文件和进程 我有一个排除列表,如果我在文件中遇到某些单词,我应该省略该行 我的代码是 string sCodeFile = @"C:\temp\allcode.lst"; List<string> sIgnoreList = new List<string>() { "foo.c", "foo1.c" }; var wordsPerLine = from line in File.ReadAllLines(sCodeFile)

我正在尝试使用LINQ读取文件和进程

我有一个排除列表,如果我在文件中遇到某些单词,我应该省略该行

我的代码是

string sCodeFile = @"C:\temp\allcode.lst";
List<string> sIgnoreList = new List<string>() { "foo.c", "foo1.c" };
var wordsPerLine = from line in File.ReadAllLines(sCodeFile)
                   let items = line.Split('\n')
                   where !line.Contains(sIgnoreList.ToString())
                   select line;

foreach (var item in wordsPerLine)
{  
 console.WriteLine(item);
}
最后我只想

\voodoo\voodoo.h
\voodoo\std.c
如何处理contains中被忽略的列表?用我上面的代码,我不能确定得到想要的输出

有人能帮忙吗

问候,, Karthik试试这个

        string sCodeFile = @"C:\temp\allcode.lst";
        List<string> sIgnoreList = new List<string>() { "foo.c", "foo1.c" };

        var wordsPerLine = File.ReadAllLines(sCodeFile).Where(n =>
        {
            foreach (var ign in sIgnoreList)
            {
                if (n.IndexOf(ign) != -1)
                    return false;
            }
            return true;
        });
string sCodeFile=@“C:\temp\allcode.lst”;
List sIgnoreList=newlist(){“foo.c”,“foo1.c”};
var wordsPerLine=File.ReadAllLines(sCodeFile)。其中(n=>
{
foreach(签名列表中的变量签名)
{
如果(n.IndexOf(点火)!=-1)
返回false;
}
返回true;
});
它将当前元素(
n
)传递给lambda函数,lambda函数根据
sIgnoreList
的每个元素检查当前元素。返回
false
表示忽略元素,
true
表示返回元素。

将其更改为:

where !sIgnoreList.Contains(line)
您需要比较每一行,并检查它是否不存在于忽略列表中


这就是弗拉迪斯拉夫的答案不起作用的原因。

修改了我的答案。错误在于您正在忽略列表上执行
ToString
,这肯定不起作用。您必须检查列表中的每个项目,这可以通过以下方式完成:

where !sIgnoreList.Any(ignore => line.Contains(ignore))
where !sIgnoreList.Any(line.Contains)
好奇:因为上面的lambda只是将一个值传递到一个只将该值作为参数的方法中,所以您可以将其作为一个方法组编写得更加紧凑,如下所示:

where !sIgnoreList.Any(ignore => line.Contains(ignore))
where !sIgnoreList.Any(line.Contains)

以下是可行的解决方案:

        var result = from line in File.ReadAllLines(codeFile)
                     where !ignoreList.Any(line.Contains)
                     select line;

问题是,您不想检查整个路径,并将单词/行部分弄乱了一点。

您提到了LINQ SQL,但这似乎是LINQ to Objects。。。这里有SQL吗?或者这只是一个打字错误?(提示:它会从根本上影响答案)对不起,输入错误。我的错。我正在尝试使用LINQ和一些条件来读取文件内容,所以:
line.Split('\n')
-一行很少包含
\n
,否则它不是一行-这应该是涉及斜杠的内容吗?可能是因为您正在查找
foo.c
而不是
\voodoo\foo.c
?是的,我想删除所有包含foo.c的行。好的,如果我给出完整的路径,它会工作。但由于我的要求,我无法提供完整路径请使用Linq而不是
foreach
,我的眼睛受伤了!:)@Peter,请提供一个建议:)当然:
在哪里(n=>!sIgnoreList.Any(ign=>n.IndexOf(ign)!=-1))
只有在我提供完整路径的情况下才有效,这在我的情况下是不可能的,因为我的LST文件中有2000多行。这是一个打字错误。但是我不能用这个得到我想要的结果apporoack@Karthik,请看我修改后的答案。谢谢彼得。很好。这就是我需要的