如果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合法嗎? 是的,了解原因