EF4 LINQ - добавление фильтрации в объединение - PullRequest
0 голосов
/ 28 марта 2011

Как добавить FILTER CLAUSE в JOIN TABLE .... в LINQ?

AND t2.Public = 1 AND t2.Color = 'Blue'


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'

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Если у ваших сущностей нет свойства навигации между ними, используйте:

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

1 голос
/ 28 марта 2011

Это должно выглядеть примерно так.

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")
}

Это все, что я могу оказать, не зная больше об именах сущностей в вашем контексте, их отношениях друг с другом и типахих скалярные значения.

...