【发布时间】:2021-07-20 02:01:43
【问题描述】:
我有
var query = from c in db.customers_info
group c by c.issue_date into g
select new
{
name = g.Key,
value = g.Count()
};
除了按 c.issue_date 分组外,还有其他字段,例如“c.gender”、“c.termination_date”、“c.customer_name”和许多字段。我想创建一个控制台应用程序,用户可以在其中输入他想要分组的字符串,并且查询会选择它。类似的东西
var query = from c in db.customers_info
group c by c.{user_input} into g
select new
{
name = g.Key,
value = g.Count()
};
到目前为止我的次优解决方案:
var query = from c in db.customers_info
group c by user_input.Equals("issue_date")? c.issue_date : user_input.Equals("gender")? c.gender : ... and more conditions.
into g
select new
{
name = g.Key,
value = g.Count()
};
有可能吗?
编辑:更愿意将 groupby 作为生成的 SQL 查询的一部分进行处理,而不是将所有字段带入应用程序,并将 groupby 放在应用程序级别。谢谢!
【问题讨论】:
-
这能回答你的问题吗? LINQ Grouping dynamically
-
嘿,@gunr2171 感谢 cmets。看起来他们的解决方案将“groupBy”带入了应用程序级别。我希望在数据库中完成“GroupBy”。
-
Linq 将把 Group By 条件作为它生成的 SQL 查询中的一个子句来实现。这就是您所说的“在数据库中完成'GroupBy'”的意思吗?您可以使用 dbContext 的 Database.Log 属性来检查 Linq 生成的 SQL。
-
LINQ Grouping dynamically 中的答案之一建议使用 Dynamic Linq,dynamic-linq.net。我相信这会正确地动态生成查询,请参阅dynamic-linq.net/basic-query-operators#groupby:Dynamic LINQ GroupBy 功能与正常的强类型 GroupBy 相同。 请参阅:How to use GroupBy using Dynamic LINQ。
-
如果您使用的是 .net 框架(而不是 .net 核心),请查看 DynamicQueryable
标签: c# sql asp.net entity-framework