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

时间:2016-03-09 00:10:22

标签: c# generics lambda generic-list

我有一个自定义类型的通用列表,我试图找回一个类型的实例。我已经尝试了两种" FirstOrDefault"和"其中"使用两个必须为真的条件,但它们都给我相同的错误信息("运算符&&&'不能应用于' 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; }
}

2 个答案:

答案 0 :(得分:5)

你必须只提供一个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;
}

你的lamba必须提供&#34;如果&#34;部分,其余部分在Linq实现中。

答案 1 :(得分:2)

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

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

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