Как сделать объединение в LINQ для нескольких полей в одном объединении - PullRequest
227 голосов
/ 17 декабря 2008

Мне нужно выполнить запрос LINQ2DataSet, который объединяет несколько полей (как

var result = from x in entity
join y in entity2 
       on x.field1 = y.field1 
and 
          x.field2 = y.field2

Я еще не нашел подходящего решения (я могу добавить дополнительные ограничения к предложению where, но это далеко от подходящего решения, или использовать это решение, но оно предполагает эквиджоин).

Возможно ли в LINQ объединить несколько полей в одно соединение?

EDIT

var result = from x in entity
             join y in entity2
             on new { x.field1, x.field2 } equals new { y.field1, y.field2 }

- это решение, на которое я ссылался как на приведенное выше эквиджоин.

Далее РЕДАКТИРОВАТЬ

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

Однако я пытаюсь понять, какие возможности и лучшие практики у меня есть / которые следует использовать с LINQ. Мне скоро понадобится выполнить соединение запроса диапазона дат с идентификатором таблицы, и я просто решил эту проблему, похоже, мне нужно добавить диапазон дат в предложении where.

Спасибо, как всегда, за все предложения и комментарии

Ответы [ 12 ]

0 голосов
/ 01 сентября 2017

Объявите класс (тип) для хранения элементов, к которым вы хотите присоединиться. В приведенном ниже примере объявите JoinElement

 public class **JoinElement**
{
    public int? Id { get; set; }
    public string Name { get; set; }

}

results = from course in courseQueryable.AsQueryable()
                  join agency in agencyQueryable.AsQueryable()
                   on new **JoinElement**() { Id = course.CourseAgencyId, Name = course.CourseDeveloper } 
                   equals new **JoinElement**() { Id = agency.CourseAgencyId, Name = "D" } into temp1
0 голосов
/ 12 сентября 2013
from d in db.CourseDispatches
                             join du in db.DispatchUsers on d.id equals du.dispatch_id
                             join u in db.Users on du.user_id equals u.id
                             join fr in db.Forumreports on (d.course_id + '_' + du.user_id)  equals  (fr.course_id + '_'+ fr.uid)

это работает для меня

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