如果LINQ to实体查询未返回任何值,那么如何返回默认值

defaultifempty entity-framework linq linq-to-entities

在这样的LINQ to实体表达式中:

var vote = (from vote in db.Vote where
    vote.Voter.Id == user.Id
    select v).FirstOrDefault();

如何添加DefaultIfEmpty值,以便在没有投票时我会得到一个默认值?

一般承认的答案

我最终选择了一个非常简单的方法,这个方法在后面被删除的答案推荐:

var vote = (from vote in db.Vote 
            where vote.Voter.Id == user.Id
            select v).FirstOrDefault();
if (vote == null) {
    vote = new Vote() { .... };
    db.AddToVoteSet(vote);
}

热门答案

另一种方法,如果Vote是一个引用类型,因此使用null作为其默认值,将使用null合并运算符:

var vote = (db.Vote
   .Where(v => v.Voter.Id == user.Id)
   .FirstOrDefault()) ?? defaultVote;


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因