按条件分组 - Linq

时间:2017-04-18 07:17:10

标签: c# database oracle linq lambda

我正在尝试使用LINQ和LAMBDA表达式来查询ORACLE数据库中的表。使用group by子句时,获取数据的时间会大大增加。

在下面的代码块中,有一个group by表达式,其中包含if条件。

using (var entities = new Entities())
{
    var result = entities.myTable.Where(a => a.COLUMNONE > 1)
        .GroupBy(g => new { columnForGrouping = (g.COLUMNTWO > 50 ? "Group1" : "Group2") })
        .Select(sel => new {
            columnGroup = sel.Key.columnForGrouping, 
            count = sel.Count()
        }).ToList();
}

我想知道这种类型的表达式有多高效?而且,它有更好的吗?

2 个答案:

答案 0 :(得分:1)

以下说明可能会导致性能问题:

CAST( "Extent1"."COLUMNTWO" AS number(10,0)))

在sql中强制转换可能会在性能方面产生意外行为。我建议你使用不同的数据类型。

答案 1 :(得分:-1)

Linq sql查询效率不高,尤其是group by和join。强烈建议优化查询并直接使用它。

在我的一个案例中,将时间从12秒减少到3秒。