我试图从Linq切换到lambda表达式。我想在表格中计算不同的行。
有没有更好的方法来获得下面的那个?
var count = _db.myTable
.Where(i=>i.DATE.HasValue && i.DATE==DateFrom)
.AsEnumerable()
.Select(x=>x.myTable_ID)
.Distinct()
.Count();
答案 0 :(得分:1)
我正在尝试从Linq切换到lambda表达式。
目前还不清楚你的意思是什么,但lambda表单仍然使用LINQ - 如果你的意思是之前有一个查询表达式,那么值得注意的是查询表达式只是由编译器转换为非查询表达式代码
就实际查询而言,您应该摆脱AsEnumerable()
调用,否则您将在.NET进程中执行所有操作,而不是要求数据库执行此操作。简单地说:
var count = _db.myTable
.Where(i => i.DATE.HasValue && i.DATE == DateFrom)
.Select(x => x.myTable_ID)
.Distinct()
.Count();
在确定仍然有效之后,你应该检查生成的SQL - 它应该在数据库中进行所有计数,基本上。
你也应该看看你是否真的需要i.DATE.HasValue
检查 - 我怀疑你没有,好像DateFrom
不可为空,它只会匹配非空值无论如何DATE
。