Перевести SQL в linq-to-sql (подзапрос) - PullRequest
2 голосов
/ 08 октября 2009

Как преобразовать следующий оператор SQL в LinqToSQL?

select t1.name, (select COUNT(*) from table2 where t2.f_id = t1.id) as cnt
from table1 t1

Кажется, мои попытки заканчиваются тем, что я сделал внутреннее соединение (и, следовательно, дал крайне неточные результаты).

Спасибо

Ответы [ 3 ]

3 голосов
/ 04 ноября 2009

Если в вашей базе данных присутствуют отношения, вы можете использовать довольно простой запрос, подобный следующему:

var results = from t1 in context.Table1
              select new
              {
                  t1.Name,
                  T2Count = t1.Table2s.Count()
              };

Если отношений нет, это должно сработать:

var results = from t1 in context.Table1
              join t2 in context.Table2 on t1.id equals t2.f_id into joined
              select new
              {
                  t1.Name,
                  T2Count = joined.Count()
              };
0 голосов
/ 04 ноября 2009
var result = db.table1s.select(t => new {.Name = t.Name, .Count = t.table2s.Count()});
0 голосов
/ 08 октября 2009

Edit2:

Попробуйте вместо этого исправить проблему с ключом в первом запросе, а во втором теперь создается правильный пустой результат.

var subQuery = from t2 in DataContext.Table2
               group t2 by t2.f_Id into myGroup
               select new { Id = myGroup.Key, Cnt = myGroup.Count() };


var result = from t1 in DataContext.Table1
             join t2 in subQuery on t1.Id equals t2.Id into temp
             from t3 in temp.DefaultIfEmpty(new { Id = t1.Id, Cnt = 0 })
             select new { t1.Name, t3.Cnt };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...