Linq Left Outer соединяет два стола на двух полях
Как мне оставить внешнее соединение двух таблиц на двух полях в linq? У меня есть sql:
select a.*, b.* from courselist as a
left outer join Summary as b
on a.subject = b.Subject and a.catalog =
b.Catalogno
where a.degree_id = 1
order by a.sequenceNo
Ниже приведен мой запрос linq, но есть ошибка, подчеркивающая "join", которая не удалась при вызове "Groupjoin". Я не знаю, как это исправить.
var searchResults = (from a in db.courselist
join b in db.Summary on
new { a.subject,a.catalog } equals
new { b.Subject, b.Catalogno } into ab
where a.degree_id == 1
orderby a.degree_sequenceNo
from b in ab.DefaultIfEmpty()
select new
{
Courselist = a,
Summary = b
}
).ToList();
Благодарю.
3 ответа
Я снова проверил ваш код и обнаружил, что это ошибка, вам просто нужно указать имя параметров соединения следующим образом:
new { suject = a.subject, catalog = a.catalog } equals
new { suject = b.subject, catalog = b.Catalogno } into ab
Основная проблема, когда люди начинают использовать LINQ, заключается в том, что они продолжают думать по-SQL, сначала они проектируют запрос SQL, а затем переводят его в LINQ. Вам нужно научиться мыслить в стиле LINQ, и ваш запрос LINQ станет точнее и проще. Например, в вашем LINQ вам не нужны объединения. Вы должны использовать Ассоциации / Свойства навигации вместо этого. Проверьте этот пост для более подробной информации.
Должны быть отношения между courselist
а также Summary
в этом случае вы можете получить доступ Summary
через courselist
как это:
var searchResults = (from a in db.courselist
where a.degree_id == 1
orderby a.degree_sequenceNo
select new {
Courselist = a,
Summary = a.Summary
}).ToList();
Если между ними нет никакой связи, вам следует пересмотреть свой дизайн.
Кажется, вы пропустили ссылку, в запросе нет ошибки, попробуйте использовать это:
using System.Linq;