pup*_*eno 11 linq linq-to-entities entity-framework defaultifempty
在这样的LINQ to实体表达式中:
var vote = (from vote in db.Vote where
vote.Voter.Id == user.Id
select v).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如何添加DefaultIfEmpty值,以便在没有投票时我会得到一个默认值?
Rob*_*ney 18
另一种方法,如果Vote是引用类型,因此使用null作为其默认值,将使用null合并运算符:
var vote = (db.Vote
.Where(v => v.Voter.Id == user.Id)
.FirstOrDefault()) ?? defaultVote;
Run Code Online (Sandbox Code Playgroud)
添加自己的扩展方法.例如:
public static class Extension
{
public static T FirstOrDefault(this IEnumerable<T> sequence, T defaultValue)
{
return sequence.Any() ? sequence.First() : defaultValue;
}
}
Run Code Online (Sandbox Code Playgroud)
在该范围内,您可以说:
var vote = (from vote in db.Vote where
vote.Voter.Id == user.Id
select v).FirstOrDefault(yourDefaultValue);
Run Code Online (Sandbox Code Playgroud)
当然,你的方法也可以有一个返回默认值(T)的重载,如果那是你要找的地方.已经在内置的Extension类中定义了一个DefaultIfEmpty扩展方法,所以我在示例"FirstOrDefault"中命名了该方法,这似乎更合适.
我最终采用了一种非常简单的方法,这是由此处的答案推荐的,但后来被删除了:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26596 次 |
| 最近记录: |