LINQ объединяет буквальные значения - PullRequest
0 голосов
/ 14 июля 2010

Это вроде гипотетически, так как я думаю о том, как спроектировать это. Рассмотрим этот запрос с некоторыми литеральными целочисленными значениями в критериях соединения:

Select * 
From LeftPeople l
Inner Join RightPeople r On r.RecordId = l.RecordId and r.ResultId = 3 and l.ResultId = 7

Это был бы правильный эквивилант в LINQ? Кажется, что-то вроде клочья, если это сработает, и мне интересно, есть ли лучший способ. Я полагаю, что вместо этого я мог бы поставить его в критерии «где». Что ты думаешь?

 var query = from leftPerson in LeftPeople
   join rightPerson in RightPeople on 
   new { RecordId = leftPerson.RecordId, RightResultId = 3,  LeftResultId = leftPerson.ResultId }
   equals new { RecordId = rightPerson.recordid, RightResultId = rightPerson.ResultId ,  LeftResultId = 7 }
   select new { LeftPerson = leftPerson, RightPerson = rightPerson };

Ответы [ 3 ]

3 голосов
/ 14 июля 2010

Если вы хотите, чтобы элементы имели только RightResultId, равный 3, используйте предложение Where, чтобы отфильтровать других.Я не думаю, что это действительно относится к предложению соединения.Это может сработать, но мне это кажется беспорядочным.

Другими словами, я бы сделал:

var query = from left in LeftPeople
            where left.RightResultId = 3
            join right in RightPeople.Where(r => r.LeftResultId = 7)
            on left.RecordId equals right.RecordId
            select new { LeftPerson = left, RightPerson = right };

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

1 голос
/ 14 июля 2010

если вы создали ассоциацию, вы можете написать:

from left in leftPeople
where left.ResultId == 7
from right in left.RightPeople
where right.ResultId == 3
select new {left, right};
1 голос
/ 14 июля 2010

Фильтры для LeftPeople.ResultId и RightPeople.ResultId принадлежат предложению Where в вашем операторе LINQ:

var query = from l in LefPeople
            join r in RightPeople on l.RecordId equals r.ResultId
            where r.ResultId == 3 && l.ResultId == 7
            select new { LeftPerson = l, RightPerson = r };

Попытка вставить их в предложение Join только затруднит чтение / понимание вашего запроса.

Тем не менее, я бы сказал, что SQL-запрос должен иметь эти фильтры и в предложении WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...