Что является эквивалентом следующего оператора в LINQ:LINQ - Где не существует
Select t1.appname, t1.julianDte, t1.cat
From table1 t1
Where NOT EXISTS
(Select *
from table t2
where t1.cat = t2.cat AND t2.julianDte < t1.julianDte)
Что является эквивалентом следующего оператора в LINQ:LINQ - Где не существует
Select t1.appname, t1.julianDte, t1.cat
From table1 t1
Where NOT EXISTS
(Select *
from table t2
where t1.cat = t2.cat AND t2.julianDte < t1.julianDte)
Попробуйте Not Any
узор.
var query = db.table1
.Where(t1 => !db.table2
.Any(t2 => t2.cat == t1.cat && t2.julianDte < t1.julianDte)
);
Синтаксис запросов версия ответа @David Б (с любой перевернутой всем!):
from t1 in db.Table1
where db.Table2.All(t2 => t1.cat != t2.cat || t2.julianDte >= t1.julianDte)
select new
{
t1.appname,
t1.julianDte,
t1.cat
};
Насколько хорошо это переводится в sql? По моему опыту, «ИЛИ» следует избегать. –
Из любопытства, что относительно «ИЛИ» сделает его более опасным, чем «И»? –
ИЛИ имеет тенденцию мешать использованию индексов. Найдите людей, которые живут на 3-й улице и являются водопроводчиками ... В этом случае индекс людей на улице, в которой они живут, очень полезен. Найдите людей, которые живут на 3-й улице или являются сантехниками ... В этом случае индекс людей по улице, на которой они живут, гораздо менее полезен. –
from t1 in Context.table1DbSet
let ok =
(from t2 in Context.table2DbSet
where t2.Idt1 = t1.Idt1 && t1.DateValid.HasValue
).Any()
where
t1.Active
&& !ok
Я хотел бы убедиться, чтобы комментировать это с '// где НЕ EXISTS' и попробуйте отформатировать его '! db.table2.Any ...' так, чтобы '!' находился в той же строке, что и 'Any'. Часто LINQ довольно самоописательно, но это случай, я думаю, что комментарий был бы очень признателен, но будущие разработчики попадают в ваш код. – AaronLS
@AaronLS это интересный философский вопрос ... Насколько хорошо прокомментированы синтаксические демонстрации? Мне явно не нужно было вставлять этот комментарий в пользу искателя, поскольку он уже использовал форму sql в вопросе. –
Я не критиковал ваш ответ, я делал общее предложение для тех, кто использует этот код, и спасибо, что это было полезно. – AaronLS