C# 在c中使用lambda表达式查找泛型列表#

C# 在c中使用lambda表达式查找泛型列表#,c#,linq,C#,Linq,我有以下代码: List<Visibility> ListVisibility = new List<Visibility>(); public class Visibility { public int ShpNo; public int QtyShp; public int NumPallets; public string ETA; } Visibili

我有以下代码:

List<Visibility> ListVisibility = new List<Visibility>();
    public class Visibility
    {
        public int ShpNo;
        public int QtyShp;
        public int NumPallets;
        public string ETA;            
    }

Visibility item = ListVisibility.Find(VisibItem => VisibItem.ETA == e.Day.Date.ToShortDateString());
List ListVisibility=new List();
公共类可见性
{
公众谘询服务编号;;
公共int QtyShp;
公共国际货币基金组织;
公共字符串ETA;
}
可见性项=ListVisibility.Find(VisibItem=>VisibItem.ETA==e.Day.Date.ToSortDateString());
但是,当存在与该条件匹配的项时,上述查找不会返回任何项


这里可能有什么问题?

最有可能的字符串匹配未找到匹配项。更改代码以将日期作为
DateTime
的一部分进行比较,这样它将有更好的工作机会

item => DateTime.Parse(item.ETA).Date == e.Day.Date

示例假定
e.Day
DateTime
。此外,您可能需要处理“
item.ETA
无效日期/空”的情况(即通过使用
DateTime.TryParse
)来匹配原始行为。

想到的事情有很多,但最有可能有两个:

  • Visibility.ETA
    中的字符串是否修剪了前导空格和尾随空格

  • Visibility.ETA
    中字符串的大小写是否与
    DateTime.toSortDateString()的大小写匹配

  • 如果您将条件更改为:

    var date = e.Day.Date.ToShortDateString();
    var vis = list.Find(
        v => String.Compare(v.ETA, date, StringComparison.OrdinalIgnoreCase) == 0);
    

    它找到你要找的东西了吗?如果不是,你应该考虑是否需要转换ETA到<代码> DATETIME> /COD> < < /P> < P>奥卡姆剃须刀:你假设有一个与你的条件匹配的项是不正确的。< /P> 您可以通过一个简单的测试(使用NUnit)验证该方法是否有效

    [测试]
    公共void TestFind()
    {
    var etaValue=DateTime.Now.Date.ToSortDateString();
    var可视性=新列表{new Visibility{ETA=etaValue};
    var foundItem=visibilities.Find(x=>x.ETA==etaValue);
    Assert.That(foundItem,Is.Not.Null);
    }
    
    您确定与
    ToSortDateString
    返回的确切字符串匹配吗?可能是日期格式的区域设置问题。如果您可以对
    ETA
    进行重构以使用
    日期时间
    而不是字符串,比较会更容易。
    [Test]
    public void TestFind()
    {
         var etaValue = DateTime.Now.Date.ToShortDateString();
         var visibilities = new List<Visibility> { new Visibility { ETA = etaValue } };
         var foundItem = visibilities.Find(x => x.ETA == etaValue);
         Assert.That(foundItem, Is.Not.Null);
    }