Как правильно составить мой запрос Linq, в котором задано условие для иностранного объекта? - PullRequest
0 голосов
/ 08 марта 2011

Ниже приведены примеры данных с целью объяснения этого вопроса:

tblPrimary
1, John, 2011-01-03T11:12:00z
2, John, 2011-02-04T10:54:12z

tblDetail:
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04

Используя приведенную выше таблицу примеров, мне присваивается «Имя», где мне нужно возвращать все подробные записи, связанные с именем вtblPrimary.Name.TblPrimary.Name не является уникальным, поэтому будут дубликаты, но это действительно разные позиции, так как они имеют разные дату и время.

Используя SQLMetal, код генерируется так, что объект обрабатывает отношения между двумястолы.Имея это в виду, я строю запрос следующим образом:

var q = from i in dbcontext.tblDetail
where i.tblPrimary.Name == 'John' && i.PrimaryId == i.tblPrimary.PrimaryId
select i;

Используя приведенный выше пример данных, если у меня есть два «Джона» в tblPrimary с разными DateAdded и 2 записи в tblDetail для каждого Джона,Результат, возвращаемый запросом:

John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04
John - 2011-02-04T10:54:12z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04

Что я действительно хочу получить, так это:

John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
John - 2011-02-04T10:54:12z
3, 2, 10, Dept03
4, 2, 17, Dept04

Кто-нибудь может подсказать, как я могу решить этот запрос Linq без использования Joins?Я предполагаю, что сгенерированные sqlmetal отношения между двумя таблицами должны обрабатывать объединения, уже для меня.

1 Ответ

0 голосов
/ 08 марта 2011

Хмм, посмотрите на эту часть запроса:

i.PrimaryId == i.tblPrimary.PrimaryId

Свойство tblPrimary определено таким образом, что это выражение всегда истинно.


Кто-нибудь может подсказать, как я могу решить этот запрос Linq без использования Joins?

Как насчет этого?

var q =
   from i in  dbcontext.tblDetail 
   let j = i.tblPrimary
   select new {Detail = i, Primary = j};
...