Выполнение SQL "в" эквиваленте в EF - PullRequest
0 голосов
/ 02 июля 2011

У меня есть два оцениваемых объекта E и S, S содержится внутри E, так что вы говорите E.S, и они оба используют один и тот же объект R для оценки; R всегда будет иметь ТОЛЬКО ОДИН оцененный объект за раз, поэтому, если R.E.HasValue == true, то R.S.HasValue никогда не будет истинным.

У меня есть все объекты R из базы данных, и у меня есть E. Каково будет лямбда-выражение для получения всех Rs, где R.S в E.S ??



ОБНОВЛЕНИЕ
Я нашел это Документация MSDN , где говорится:

Ссылка на нескалярные переменные, такой как сущность, в запросе нет поддерживается. Когда такой запрос выполняется, исключение NotSupportedException брошен с сообщением, в котором говорится «Невозможно создать постоянное значение Тип EntityType. Только примитивные типы («такие как Int32, String и Guid») поддерживаются в этом контексте. "

Итак ... Я не могу использовать ответ А-Дубба, так как запрос гласит

R.Where(r => r.SID.HasValue).Where(r => E.S.Contains(r.S))

Что приводит к NotSupportedException ... У меня все еще есть свойство R.SID, которое имеет тип int?, но как я мог тогда запросить все E.S, чтобы получить их идентификаторы?

P.S. E.S. имеет тип EntityCollection.

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Я скажу, что предложения IN обычно представлены вызовом Contains. Например

public class R {
   public int Id {get; set;}
}

public IEnumerable<R> InClause(IEnumerable<int> ids) {
   var subset = ids.ToList();

   return dbContext.Query<R>.Where(r => subset.Contains(r.Id));
}

Я знаю, что это не точный вызов API в EF, но он должен помочь установить основу для вашего решения. Возможно, вы уже знаете, как генерировать предложения IN, но я полагаю, что если бы вы это сделали, то, вероятно, вы не застряли бы. Если предложение IN не является сложной частью запроса, тогда что? Может быть, часть бизнес-логики, которую вы упомянули? Опять же, объектная модель C # поможет.

0 голосов
/ 09 июня 2017

Однако проблема с использованием содержимого заключается в том, что он ближе к sql "like", чем "in". Так что если у вас есть запись пользователя, скажем, 8-значный ID и кто-то вводит 0, затем содержит вернет ВСЕ идентификаторы с нулями где-то в нем.

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