C# 如何在LINQ中检查列表
我正在尝试使用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)
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,请看我修改后的答案。谢谢彼得。很好。这就是我需要的