如何将以下 linq 查询转换为 SQL 中的 (Having)
Posted
技术标签:
【中文标题】如何将以下 linq 查询转换为 SQL 中的 (Having)【英文标题】:How can I convert the following linq queries to a (Having) like in SQL 【发布时间】:2014-10-27 14:12:15 【问题描述】:我的目的是汇总结果,而不是缩小范围。
if (Request.QueryString["VenueType"] == null)
Renders = _renderContext.Renders;
else
List<int> venueTypeIds = Request.QueryString["VenueType"].Split(',')
.Select(int.Parse).ToList();
Renders = _renderContext.Renders.Where(v => venueTypeIds.Contains(v.VenueTypeId));
// SECOND CRITERION:
if (Request.QueryString["SearchTerm"] != null)
Renders = Renders.Where(r => r.Title.ToLower()
.Contains(Request.QueryString["SearchTerm"].ToLower()));
// ADDITIONAL CRITERION:
if (Request.QueryString["EventType"] != null)
List<int> eventTypeIds = Request.QueryString["EventType"].Split(',')
.Select(int.Parse).ToList();
Renders = Renders.Where(w => eventTypeIds.Contains(w.EventTypeId));
if (Request.QueryString["DisplayFormat"] != null)
List<int> displayFormatIds = Request.QueryString["DisplayFormat"].Split(',')
.Select(int.Parse).ToList();
Renders = Renders.Where(w => displayFormatIds.Contains(w.DisplayFormatId));
查询字符串来自可能具有一对多选项的复选框组。我试图返回的结果不应该在第一组标准之后缩小范围,而是返回更多结果。
问题:如何使用 where 子句或 GroupBy 子句来获取返回项目的聚合而不是缩小返回项目的范围?
【问题讨论】:
我投票决定关闭这个答案,因为即使我已经陈述了这个问题并且我有一个对我有帮助的答案。它可能有轻微的语法错误,但它帮助了我。其他人对它投了反对票,如果其他人认为它很糟糕,即使它极大地帮助了我,它也一定很糟糕。我不会在 Stack Overflow 上发布太多内容,而是会向我的同行寻求我有疑问的问题的答案。感谢您安排我在 Stack Overflow 的位置! 【参考方案1】:如果我正确理解您的问题,您可以逐步构建您的结果,类似这样(为简洁起见减少代码)...
IQueryable query = from x in Context.Stuff
select x;
List<Stuff> output = List<Stuff>();
output = query.Where(r => r.Title).Contains("SearchTerm")).ToList();
output += query.Where(r => r.Title).Contains("DifferentSearchTerm")).ToList();
请参阅 this So post 了解如何在 Linq 中执行显式 Group By,尽管鉴于您的标准的复杂性,我的拙见是相当难以维护的。
【讨论】:
@EricB 欢迎您,这里的关键是保持初始 IQueryable 完整,并检索结果并将它们自己有效地聚合到“输出”变量中......并且不要被推迟可以在 SO 上盛行的有点迂腐的元素。 这里是 linq 与有和 groupby... euch ***.com/questions/18050386/…以上是关于如何将以下 linq 查询转换为 SQL 中的 (Having)的主要内容,如果未能解决你的问题,请参考以下文章
如何将此 GROUP BY / MIN SQL 查询转换为 LINQ?
如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物