C# 无法按特定字符串值从列表中获取记录

C# 无法按特定字符串值从列表中获取记录,c#,linq,C#,Linq,我正在上课,其中包含一些记录: public class File { public string Name { get; set; } public List<Coordinates> Coordinates { get; set; } } 假设我的当前文件名是:TestFile-Dump3.xlsx.sheet1 var list = List<File>(); var File = list.FirstOrDefault(ls => ls.N

我正在上课,其中包含一些记录:

public class File
{
    public string Name { get; set; }
    public List<Coordinates> Coordinates { get; set; }
}
假设我的当前文件名是:TestFile-Dump3.xlsx.sheet1

var list = List<File>();
var File = list.FirstOrDefault(ls => ls.Name == "TestFile-Dump3.xlsx.sheet1"); //null
var list=list();
var File=list.FirstOrDefault(ls=>ls.Name==“TestFile-Dump3.xlsx.sheet1”)//无效的
我只想查找上述文件名的坐标列表,但当我尝试查找时,文件TestFile-Dump3.xlsx.sheet1的坐标值为空


有人能告诉我问题出在哪里,以及如何使用linq解决吗?

嗯,第一条记录包含文件名,但作为子字符串。由于它们由逗号分隔,因此可以使用
String.Split
Enumerable.Contains

var File = list
    .FirstOrDefault(ls => ls.Name.Split(',').Contains("TestFile-Dump3.xlsx.sheet1")); 

第一条记录包含文件名,但作为子字符串。由于它们由逗号分隔,因此可以使用
String.Split
Enumerable.Contains

var File = list
    .FirstOrDefault(ls => ls.Name.Split(',').Contains("TestFile-Dump3.xlsx.sheet1")); 

示例记录不包含名为“TestFile-Dump3.xlsx.sheet1”的
记录。唯一的~matching~是第一个,但它的
名称
仅包含您要查找的字符串

换句话说:用调用
Contains
来替换
=
是否有助于解决您的问题?或者您想要
Split()
名称并比较各个部分

list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1"));


示例记录不包含名为“TestFile-Dump3.xlsx.sheet1”的
记录。唯一的~matching~是第一个,但它的
名称
仅包含您要查找的字符串

换句话说:用调用
Contains
来替换
=
是否有助于解决您的问题?或者您想要
Split()
名称并比较各个部分

list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1"));


第一个记录名不等于整个字符串。因此,使用startswith或contains

list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1");

list.FirstOrDefault(ls => ls.Name.StartsWith("TestFile-Dump3.xlsx.sheet1");

第一个记录名不等于整个字符串。因此,使用startswith或contains

list.FirstOrDefault(ls => ls.Name.Contains("TestFile-Dump3.xlsx.sheet1");

list.FirstOrDefault(ls => ls.Name.StartsWith("TestFile-Dump3.xlsx.sheet1");

问题是第一条记录将此文件名作为子字符串而不是作为一个整体包含stringUse StartsWith。ls.Name.StartsWith(“TestFile-Dump3.xlsx.sheet1”)其他用户已经建议使用
Contains
StartsWith
检查子字符串,但也要注意,您应该使用
Equals
-方法而不是==运算符来比较字符串,因为该操作执行引用比较().在这种情况下,
==
是完全公平的,言辞如预期。您链接到的答案讨论了
==
Equals()
之间的区别,但我看不出它们在这里是如何应用的<代码>=
不比较此处的引用。String使用运算符重载将
==
直接映射到
Equals()
问题在于第一条记录将此文件名作为子字符串而不是作为一个整体包含stringUse StartsWith。ls.Name.StartsWith(“TestFile-Dump3.xlsx.sheet1”)其他用户已经建议使用
Contains
StartsWith
检查子字符串,但也要注意,您应该使用
Equals
-方法而不是==运算符来比较字符串,因为该操作执行引用比较().在这种情况下,
==
是完全公平的,言辞如预期。您链接到的答案讨论了
==
Equals()
之间的区别,但我看不出它们在这里是如何应用的<代码>=
不比较此处的引用。String使用运算符重载将
==
直接映射到
Equals()
是的,这很有效。非常感谢您的帮助,请继续这样帮助。迟到的新年快乐:)是的,这很有效。非常感谢您的帮助,请继续这样帮助。迟到的新年快乐:)