C# 如何根据两个条件从通用列表中获取项目?
我有一个自定义类型的泛型列表,我试图从中获取一个类型实例。我使用两个需要为true的条件尝试了“FirstOrDefault”和“Where”,但它们都给了我相同的err msg(“运算符“&&&”不能应用于“lambda表达式”和“lambda表达式”类型的操作数”) 这是: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
// 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我倾向于同意,特别是当这个问题可能因为印刷错误而被关闭时。