【问题标题】:Entity Framework T-Sql "having" Equivalent实体框架 T-Sql“拥有”等价物
【发布时间】:2010-11-27 06:38:34
【问题描述】:

如何编写包含有子句的实体查询的 linq?

例如:

SELECT State.Name, Count(*) FROM State
INNER JOIN StateOwner ON State.StateID = StateOwner.StateID
GROUP BY State.StateID
HAVING Count(*) > 1

【问题讨论】:

    标签: linq entity-framework linq-to-entities


    【解决方案1】:

    有什么理由不在结果上使用where 子句?

    var query = from state in states
                join stateowner in stateowners
                  on state.stateid equals stateowner.stateid
                group state.Name by state.stateid into grouped
                where grouped.Count() > 1
                select new { Name = grouped.Key, grouped.Count() };
    

    【讨论】:

    • grouped.Any() 将用于 Count() > 0,而不是 Count() > 1
    • @Craig:如果是Count() > 0,那么就根本不需要限制,因为它是一个内部连接......
    【解决方案2】:

    我相信您可以使用GroupBy 后跟Where 子句,它会将其翻译为Having。不过不完全确定。

    【讨论】:

    • 对于 MySql 它将导致内部 SELECT 带有外部 WHERE,而不是 HAVING。所以会导致性能问题。
    【解决方案3】:

    如果你想比较一个不在分组中的变量(例如:年龄),那么它将是:

    var duplicated = (
                      from q1 in db.table1
                      where (q1.age >= 10 )
                      group q1 by new { q1.firstName, q1.lastName } into grp
                      where (grp.Count() > 1 )
                      select new 
                       {
                         firstName= grp.Key.firstName,
                         lastName = grp.Key.lastName,
                       }
                     );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 2020-03-28
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多