【发布时间】:2010-05-05 14:53:44
【问题描述】:
这可能是一个基本的 LINQ 问题。我需要选择一个对象,如果它为空,请选择另一个。我正在通过以下方式使用 linq to objects,我知道可以更快、更好、更清洁地完成...
public Attrib DetermineAttribution(Data data)
{
var one = from c in data.actions
where c.actionType == Action.ActionTypeOne
select new Attrib
{
id = c.id,
name = c.name
};
if( one.Count() > 0)
return one.First();
var two = from c in data.actions
where c.actionType == Action.ActionTypeTwo
select new Attrib
{
id = c.id,
name = c.name
};
if (two.Count() > 0 )
return two.First();
}
这两个 linq 操作仅在 where 子句上有所不同,我知道有一种方法可以将它们结合起来。任何想法将不胜感激。
【问题讨论】:
-
您应该使用 .Any() 而不是 .Count()。 Count() 遍历整个序列,而 Any 只是检查第一项是否存在。
-
@MikeD:需要注意的是上面的代码不能编译,因为在两个序列都没有你要找的项目的情况下你不会返回一个值。
-
抱歉,我正试图在 SO 窗口中将我的方法整理成简洁的内容,但显然删除了太多内容。