C# 检查linq中的空值
如何在linq查询中检查null 代码如下:C# 检查linq中的空值,c#,linq,C#,Linq,如何在linq查询中检查null 代码如下: var query = _orderRepository.Table; query = query.Where(o => o.AccountId == accountId); var result = from d in query where d.CreatedOnUtc != null select d;
var query = _orderRepository.Table;
query = query.Where(o => o.AccountId == accountId);
var result = from d in query
where d.CreatedOnUtc != null
select d;
if (result != null)
{
}
//var MinDate = from d in query
// where (d.CreatedOnUtc == null ? d.CreatedOnUtc == null : d.CreatedOnUtc == (from d1 in query select d1.CreatedOnUtc).Min())
// select d.CreatedOnUtc;
//var MaxDate = from d in query
// where (d.CreatedOnUtc == null ? d.CreatedOnUtc == null : d.CreatedOnUtc == (from d1 in query select d1.CreatedOnUtc).Max())
// select d.CreatedOnUtc;
var rateSum = (query.Sum(d => d.OrderSubtotal));
var MinDate = (from d in query select d.CreatedOnUtc).Min();
var MaxDate = (from d in query select d.CreatedOnUtc).Max();
decimal qry;
//query = query.Where(c =>
//((DbFunctions.DiffDays(MinDate, MaxDate) == 0) ? rateSum : (DbFunctions.DiffDays(MinDate, MaxDate) / 30 == 0) ? "rateSum" ? "(rateSum / (DbFunctions.DiffDays(MinDate, MaxDate) / 30)"));
if ((DbFunctions.DiffDays(Convert.ToDateTime(MinDate), Convert.ToDateTime(MaxDate)) == 0))
//if ((SqlFunctions.DateDiff("", Convert.ToDateTime(MinDate), Convert.ToDateTime(MaxDate)) == 0))
{
qry = (rateSum);
}
else if ((DbFunctions.DiffDays(Convert.ToDateTime(MinDate), Convert.ToDateTime(MaxDate)) / 30 == 0))
{
qry = (rateSum);
}
else
{
qry = Convert.ToDecimal(rateSum / (DbFunctions.DiffDays(MinDate, MaxDate) / 30));
}
var orderCount = qry;
return orderCount;
有谁能告诉我,当查询值为null时,如何在rateSum、MinDate和MaxDate中检查null
我尝试了很多,但没有工作,所以有什么建议吗?这将允许rateSum可以为空小数。
我特别在外部联接查询中使用它,以避免转换为值类型失败…异常
var rateSum = (query.Sum(d => (decimal?)d.OrderSubtotal));
然后您可以检查rateSum是否为空当我需要检查查询是否为空时,我使用
query.Count()
要检查MinDate是否为空,只需应用相同的系统:
var MinDate = (from d in query select (DateTime?)d.CreatedOnUtc).Min();
下面的方法对你不管用吗
var rateSum = query.Where(d=>d.OrderSubtotal !=null).Sum(d => d.OrderSubtotal);
PS:您需要将OrderSubtotal更改为十进制?(可为空的十进制数)如果该值以DB为单位可为空
对于MinDate,如下所示
var MinDate = query.Where(d=>d.CreatedOnUtc !=null).Min(d =>d.CreatedOnUtc);
十进制类型为OrderSubtotal@Nkosi你能给出一个答案吗?请澄清你的具体问题或添加额外的细节,以突出你所需要的。正如目前所写的,很难准确地说出你在问什么。请参阅本页以帮助澄清此问题。凌乱的布局、糟糕的拼写和标点符号传达了对手头问题的匆忙和缺乏思考。你只是问我们怎么做而没有真正解释你的问题。很可能,如果你冷静地解释它,你也会找到解决方案。CreatedOnUtc是日期时间,所以当我检查它时,会给出错误我如何检查MinDate?如果没有更改,我如何检查PS:你需要将OrderSubtotal更改为decimal?(nullable decimal)如果值在DB中为nullable??这是我想在linq中实现相同内容的sql查询..那么你能给我一个正确的解决方案吗?CreatedOnUtc是日期时间,所以当我检查它时,它会给我错误–此函数只能从linq调用到实体。如果((DbFunctions.DiffDays(Convert.ToDateTime(MinDate))错误出现,Convert.ToDateTime(MaxDate))==0)如何检查DiffDays?如果MinDate或MaxDate为Null,则不执行DiffDays这是我希望在linq中实现相同内容的sql查询。因此,您能给我一个适当的解决方案吗?您能写下来吗??