【问题标题】:EF4 LINQ - Adding Filtering on a JoinEF4 LINQ - 在连接上添加过滤
【发布时间】:2011-03-29 02:01:43
【问题描述】:

如何在 LINQ 中将过滤子句添加到 JOIN TABLE ....中?

AND t2.Public = 1 AND t2.Color = '蓝色'


SELECT t1.ID, t1.Name, (SELECT COUNT(*) 
                      FROM tbl2 t2 
                     WHERE t2.ID = t1.ID 
                       AND t2.Public = 1 AND t2.Color = 'Blue') AS MyCount 
 FROM tbl1 t1
WHERE t1.State = 'CA'

【问题讨论】:

    标签: .net entity-framework-4 linq-to-entities


    【解决方案1】:

    它应该看起来像这样。

    from t1 in context.tbl1
    where t1.State = "CA"
    select new 
    {
        t1.ID, 
        t1.Name,
        MyCount = t1.tbl2s.Count(t2 => t2.Public && t2.Color == "Blue")
    }
    

    这就是我可以提供的所有帮助,而无需更多地了解上下文中实体的名称、它们之间的关系以及它们的标量值的类型。

    【讨论】:

      【解决方案2】:

      如果您的实体之间没有导航属性,请使用:

      var data = from t1 in context.Tbl1
                 join t2 in context.Tbl2 on t1.Id equals t2.Id
                 where t1.State = "CA" && t2.Public == 1 && t2.Color = "Blue"
                 group t1 by new { t1.Id, t1.Name } into g
                 select new 
                     {
                         Id = g.Key.Id,
                         Name = g.Key.Name,
                         Count = g.Count()
                     };
      

      如果他们有导航属性,请使用@StriplingWarrior 提供的解决方案

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 2017-07-18
        • 2012-07-08
        • 1970-01-01
        • 2014-02-01
        • 2012-01-21
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        相关资源
        最近更新 更多