C# 如何根据两个条件从通用列表中获取项目?

C# 如何根据两个条件从通用列表中获取项目?,c#,generics,lambda,generic-list,C#,Generics,Lambda,Generic List,我有一个自定义类型的泛型列表,我试图从中获取一个类型实例。我使用两个需要为true的条件尝试了“FirstOrDefault”和“Where”,但它们都给了我相同的err msg(“运算符“&&&”不能应用于“lambda表达式”和“lambda表达式”类型的操作数”) 这是: // FirstOrDefault UnitItemCodeItemID uicii = unitItemCodeItemIDList .FirstOrDefault((u => u.Un

我有一个自定义类型的泛型列表,我试图从中获取一个类型实例。我使用两个需要为true的条件尝试了“FirstOrDefault”和“Where”,但它们都给了我相同的err msg(“运算符“&&&”不能应用于“lambda表达式”和“lambda表达式”类型的操作数”)

这是:

// FirstOrDefault
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList
        .FirstOrDefault((u => u.Unit == _unit) && (d => d.Description == desc));


// Where
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList
        .Where((u => u.Unit == _unit) && (d => d.Description == desc));
我不知道这是否相关,但课程是:

public class UnitItemCodeItemID
{
    public string Unit { get; set; }
    public string Description { get; set; }
    public string ItemCode { get; set; }
    public int ItemID { get; set; }
}

您需要提供一个封装这两个条件的lambda表达式

.Where(p => p.Unit == _unit && p.Description == desc);

您以前的尝试是尝试将两个单独的lambda表达式与
语句组合在一起。

您只需提供一个lambda:

UnitItemCodeItemID uicii = unitItemCodeItemIDList
    .FirstOrDefault(obj => obj.Unit == _unit && obj.Description == desc);
这样想:这就像在函数中编写foreach循环一样。像这样:

public UnitItemCodeItemID ExtractFirst(IEnumerable<UnitItemCodeItemID> unitItemCodeItemIDList)
{
    foreach(var obj in unitItemCodeItemIDList)
    {
        if (obj.Unit == _unit && obj.Description == desc)
            return obj;
    }
    return null;
}
public UnitItemCodeItemID ExtractFirst(IEnumerable UnitItemCodeItemID列表)
{
foreach(unitItemCodeItemIDList中的var obj)
{
如果(对象单位===对象单位和对象描述==描述)
返回obj;
}
返回null;
}

lamba必须提供“if”部分,其余部分在Linq实现中

&
进入lambda:
.FirstOrDefault(u=>u.Unit==\u.Unit&&u.Description==desc)@DavidG尽量避免在评论中发布答案。即使是一行,答案也是答案!:-)@GediminasMasaitis我知道我在做什么,我已经在这里呆了很长时间(检查我的代表…),但我认为这个问题不值得一个完整的答案。@GediminasMasaitis-是的,我同意DavidG-提供一个简单的答案作为对这个问题的评论是非常好的。@DavidG我倾向于同意,特别是当这个问题可能因为印刷错误而被关闭时。