无法通过特定字符串值从列表中获取记录

时间:2017-01-02 10:23:23

标签: c# linq

我在下面的课程中包含一些记录:

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 ???

3 个答案:

答案 0 :(得分:2)

好吧,第一条记录包含文件名,但是作为子字符串。由于它们以逗号分隔,因此您可以使用String.SplitEnumerable.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");