Что может идентичный запрос Linq to sql для этого запроса сервера SQL? - PullRequest
0 голосов
/ 05 октября 2010

Я хочу преобразовать следующий запрос сервера sql с запросом Linq-to-sql. Что мне нужно сделать. как это будет? Я использую c #.

SELECT       Table1.CRNo, Table2.StageId

FROM         Table1 INNER JOIN Table2 
             ON Table1.CRNo = Table2.CRNo

WHERE        (Table2.IsActive = 'true')

Таблица 1 и Таблица 2 - две таблицы. CRNo идентичен в обеих таблицах. Таблица 2 является подробной таблицей таблицы 1.

Каким должен быть запрос.

Отредактировано

 from record1 in table1
 join record2 in table2 on record1.CRNo equals record2.CRNo
 where record2.IsActive
 select new { record1.CRNo, record2.StageId }

определенно, работает нормально. но результаты приходят с записью IsActive False также, если в таблице есть несколько записей2. скажем, таблица 2 имеет записи как:

CRNo:1 StageId: 1 IsActive:False
CRNo:2 StageId: 1 IsActive:False
CRNo:1 StageId: 2 IsActive:True

Тогда это идет с CRNo 1 со Стадией 1, которая имеет IsActive False. Почему это происходит? Пожалуйста, проверьте это снова

Ответы [ 2 ]

3 голосов
/ 05 октября 2010
from record1 in table1
join record2 in table2 on record1.CRNo equals record2.CRNo
where record2.IsActive
select new { record1.CRNo, record2.StageId }
0 голосов
/ 05 октября 2010

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

from t1 in Table1
where t1.Table2.IsActive == "true"   // assuming that IsActive is a string and not a boolean
select new { t1.CRNo, t1.Table2.StageId }

Чтобы ускорить процесс, вам, возможно, следует использовать DataLoadOptions, чтобы указать, что для каждой t1 должна быть выбрана также запись Table2:

using (ctx = new MyDataContext()) {
  var options = new DataLoadOptions();
  options.LoadWith<Table1>(x => x.Table2);
  ctx.LoadOptions = options;

  var res = from t1 in Table1
            where t1.Table2.IsActive == "true"
            select new { t1.CRNo, t1.Table2.StageId };

}

Кроме того, вы можете посмотреть здесь примеры синтаксиса linq.

Редактировать - рассматривать только активные записи:

from t1 in table1
join t2 in table2.Where(x => x.IsActive == "true") on t1.CRNo equals t2.CRNo
select new { t1.CRNo, t2.StageNo };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...