linq到linq和lambda之间的实体查询的性能?
我对查询有点怀疑,它有点慢,我想知道什么是最好的性能。linq到linq和lambda之间的实体查询的性能?
让目前的这第一个例子:
var result = from tableA in context.TableA
join tableB in context.TableB on tableA.id equals tableB.id
where *some conditions*
select new {
tableA.id,
tableA.name,
another_name = tableA.TableC.name
some_operation = tableB.price * tableB.TableD.some_coeficient
another_operation = tableB.TableE.Sum(c=> c.some_value)
};
这就是我现在所拥有的(此查询后,我在另一个变量result.ToList()
弥问题是,如果是在各级更好地履行。性能进行:?
- 与Lambda表达式查询保持
select new {....}
部分 -
ToList()
后面的select new {....}
部分的查询?
你推荐我做什么?
它会完全一样。查询表达式基本上被转换为非查询表达式的等价物。
-
你需要使用
select new { tableA, tableB }
或类似的东西,无论如何,这样你就可以ToList
后使用这两个变量...但它很可能是慢为则:- 所有字段会从数据库中取出而不仅仅是那些被使用的数据
- 在之后,所有的投影(包括Sum等)都会发生在之后,而不是从数据库中获取值。这很可能涉及到使更多的数据库请求,访问
tableA.TableC
等
你应该看看生成的SQL,在SQL事件探查器中运行它制定出什么是缓慢的,考虑更多的指标等。
在查询中有什么更好的方法,可以在'tableA.TableC'这样的'select new'上执行嵌套,或者在'TableC'上对查询执行'join'? –
@Phoeniz_uy:我建议你同时试试,同时检查SQL和性能... –
你的where子句可能很重要,如果它变成SQL服务器找不到索引或没有索引的东西,它可能会导致性能下降。 – Mant101