我在下面的课程中包含一些记录:
public class File
{
public string Name { get; set; }
public List<Coordinates> Coordinates { get; set; }
}
现在这个名字包含如下字符串:
1st record : "TestFile-Dump3.xlsx.sheet1,TestFile-Dump2.xlsx.sheet,TestFile-Dump1.xlsx.sheet1",
2nd record : "TestFile-Dump2.xlsx.sheet1",
3rd record : "TestFile-Dump2.xlsx.sheet3,TestFile-Dump1.xlsx.sheet5"
假设我当前的文件名是: TestFile-Dump3.xlsx.sheet1
var list = List<File>();
var File = list.FirstOrDefault(ls => ls.Name == "TestFile-Dump3.xlsx.sheet1"); //null
我想找到上述文件名的坐标列表,但是当我试图找到文件 TestFile-Dump3.xlsx.sheet1 时我得到null。
有人可以告诉我这是什么问题以及如何使用linq ???
答案 0 :(得分:2)
好吧,第一条记录包含文件名,但是作为子字符串。由于它们以逗号分隔,因此您可以使用String.Split
和Enumerable.Contains
:
var File = list
.FirstOrDefault(ls => ls.Name.Split(',').Contains("TestFile-Dump3.xlsx.sheet1"));
答案 1 :(得分:2)
您的示例记录不包含Name
'TestFile-Dump3.xlsx.sheet1'的记录。唯一〜匹配〜一个是第一个,但它有Name
只有包含您正在寻找的字符串。
换句话说:通过调用==
替换Contains
以解决您的问题会有帮助吗?或者您想要Split()
名称并比较各个部分?
list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1"));
或
list.FirstOrDefault(ls => ls.Name.Split(',').Contains("TestFile-Dump3.xlsx.sheet1"));
答案 2 :(得分:1)
第一个记录名称不等于整个字符串。所以请使用startswith或contains。
list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1");
list.FirstOrDefault(ls => ls.Name.StartsWith("TestFile-Dump3.xlsx.sheet1");