Joh*_*yer 169 .net c# entity-framework
基本上,当我执行以下查询时,如果没有匹配的引导,则以下查询将引发异常.在那种情况下,我宁愿将总和等于0而不是抛出异常.这可能在查询本身 - 我的意思是,而不是存储查询和检查query.Any()
?
double earnings = db.Leads.Where(l => l.Date.Day == date.Day
&& l.Date.Month == date.Month
&& l.Date.Year == date.Year
&& l.Property.Type == ProtectedPropertyType.Password
&& l.Property.PropertyId == PropertyId).Sum(l => l.Amount);
Run Code Online (Sandbox Code Playgroud)
Sim*_*ger 362
尝试将您的查询更改为:
db.Leads.Where(l => l.Date.Day == date.Day
&& l.Date.Month == date.Month
&& l.Date.Year == date.Year
&& l.Property.Type == ProtectedPropertyType.Password
&& l.Property.PropertyId == PropertyId)
.Select(l => l.Amount)
.DefaultIfEmpty(0)
.Sum();
Run Code Online (Sandbox Code Playgroud)
这样,您的查询将只选择该Amount
字段.如果集合为空,它将返回一个值为的元素,0
然后将应用总和.
tuk*_*aef 171
我更喜欢使用另一个黑客:
double earnings = db.Leads.Where(l => l.Date.Day == date.Day
&& l.Date.Month == date.Month
&& l.Date.Year == date.Year
&& l.Property.Type == ProtectedPropertyType.Password
&& l.Property.PropertyId == PropertyId)
.Sum(l => (double?) l.Amount) ?? 0;
Run Code Online (Sandbox Code Playgroud)
试试这个,它更短:
db.Leads.Where(..).Aggregate(0, (i, lead) => i + lead.Amount);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
70679 次 |
最近记录: |