问题描述
美好的一天。 需要一些有关动态 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);