通过加入和计数的动态 Linq 组

问题描述

美好的一天。 需要一些有关动态 Linq 查询的帮助。 我有以下 sql

Select t.CustomerKey,Count(1)
    from dbo.Products p
    inner join dbo.Transactions t on t.ProductKey = p.ProductKey
    Where p.CategoryLevel3 = 'xxx'
    group by t.CustomerKey
    having count(1) > 2

我正在使用实体框架。给我相同结果的 linq 查询是。

var result2 = entities.Products.Join(entities.Transactions,p => p.ProductKey,t => t.ProductKey,(p,t) => new { p,t })
                               .Where(z => z.p.CategoryLevel3 == "xxx")
                               .GroupBy(c => new { c.t.CustomerKey })
                               .Select(x => new { x.Key.CustomerKey,count = x.Count() })
                               .Where(y => y.count > 2);

到目前为止,我有以下动态 Linq

var result2 = entities.Products.Join(entities.Transactions,t })
                               .Where("z => z.p." + filterCondition)
                               .GroupBy("c => new { c.t." + groupByField + "}")
                               .Select("x => new (x.Key as CustomerKey,x." + selectfunction + "() as count)")
                               .Where("y => y.count" + groupByFilterComparisonoperator + groupByFilterInputValue);

我在选择行上遇到语法错误

filterCondition = "CategoryLevel3 == "xxx""

groupByField ="客户密钥"

selectfunction ="计数"

groupByFilterComparisonoperator =">"

groupByFilterInputValue = "2"

解决方法

我找到了答案

var result2 = entities.Products.Join(entities.Transactions,p => p.ProductKey,t => t.ProductKey,(p,t) => new { p,t })
                               .Where("z => z.p." + filterCondition)
                               .GroupBy("c => new { c.t." + groupByField + "}")
                               .Select("new (Key," + selectfunction + "() as count)")
                               .Where("count" + groupByFilterComparisonOperator + groupByFilterInputValue);