【问题标题】:Count with left outer join in linq to entites用 linq 中的左外连接计数到实体
【发布时间】:2013-03-09 18:58:31
【问题描述】:

我无法理解 Linq to Entities 中的左外连接计数。

我的查询是:

SELECT Locations.LocationId, Locations.LocationName, LocationPrizes.PrizeId, LocationPrizes.PrizeQuantity, Prizes.PrizeName, ISNULL(COUNT(WonPrizes.WonPrizeId), 0) AS WonPrizes 

FROM Locations 

INNER JOIN LocationPrizes ON Locations.LocationId = LocationPrizes.LocationId INNER JOIN Prizes ON LocationPrizes.PrizeId = Prizes.PrizeId 

LEFT OUTER JOIN WonPrizes ON Locations.LocationId = WonPrizes.LocationId AND Prizes.PrizeId = WonPrizes.PrizeId

GROUP BY Locations.LocationId, Locations.LocationName, LocationPrizes.PrizeId, LocationPrizes.PrizeQuantity, Prizes.PrizeName

我的 Linq 是:

var locationPrizes = from l in context.Locations
                       select new
                           {
                               l.LocationId,
                               l.LocationName,
                               Prizes = from o in l.LocationPrizes
                                        select new
                                            {
                                                o.PrizeId,
                                                o.PrizeQuantity,
                                                o.Prize.PrizeJson
                                            }
                           };

我无法计算左外连接部分是否正常工作。有什么指点吗?

【问题讨论】:

    标签: c# linq entity-framework-4


    【解决方案1】:

    如果您碰巧有来自 LocationPrizes -> WonPrizes 的关联,您可以这样做:

    var locationPrizes = 
        from l in context.Locations
        select new
        {
            l.LocationId,
            l.LocationName,
            Prizes = 
                from o in l.LocationPrizes 
                select new
                {
                    o.PrizeId,
                    o.PrizeQuantity,
                    o.Prize.PrizeJson
                    WonPrizes = o.WonPrizes.Count();
                }
        };
    

    如果没有,这也可以(对我有用,下面的小修改):

    var locationPrizes = 
        from l in context.Locations
        select new
        {
            l.LocationId,
            l.LocationName,
            Prizes = 
                from o in l.LocationPrizes 
                select new
                {
                    o.PrizeId,
                    o.PrizeQuantity,
                    o.Prize.PrizeJson
                    WonPrizes = 
                        (from w in context.WonPrizes
                         where w.PrizeId == o.PrizeId 
                            && w.LocationId == l.LocationId
                         select w)
                        .Count()
                }
        };
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多