如何将以下 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)的主要内容,如果未能解决你的问题,请参考以下文章

如何将SQL查询转换为LINQ?

如何将以下 SQL 语句转换为 LINQ 方法语法

如何将 sql union 转换为 linq

如何将此 GROUP BY / MIN SQL 查询转换为 LINQ?

如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物

如何将 SQL 中的多个内部联接转换为 LINQ?