Используя Entity Framework, как фильтровать по внешнему ключу, используя несколько значений перечисления? - PullRequest
0 голосов
/ 24 февраля 2010

Две таблицы (MainTable и EventType). EventType представлен в коде как перечисление и имеет внешний ключ в базе данных, так что он выглядит так:

Public enum EventTypeId As Integer
    Blah = 1
    Blurgh = 2
    Whoo = 3
End Enum

Я могу нормально выполнить следующий запрос;

From M in dbx.MainTable Where M.EventType.EventTypeId = 1

Но я не могу этого сделать (код псевдо);

From M in dbx.MainTable Where M.EventType.EventTypeId.Contains(EventTypeId.Blah,EventTypeId.Whoo)

Второй подход более читабелен и удобен в обслуживании, так как он связан с enum, но я не могу найти конструкцию в EF, которая позволяет мне это делать.

Это текущая версия EF, а не .Net 4.0.

В общем, то, что я хочу сделать в SQL - это просто, просто оно должно быть в EF;

Select * From MainTable Where EventTypeId In (1,3);

Ответы [ 2 ]

1 голос
/ 07 февраля 2017

Если вы посмотрите на то, что вы хотите:

В общем, то, что я хочу сделать в SQL, легко, просто нужно EF;

Select * From MainTable Where EventTypeId In (1,3);

Вы должны объяснить это как: EventTypeId должен быть частью (1,3). Эквивалент для этого: (1,3) содержит EventTypeId

То, что вы пытаетесь это:

Но я не могу этого сделать (код псевдо)

From M in dbx.MainTable Where M.EventType.EventTypeId.Contains(EventTypeId.Blah,EventTypeId.Whoo)

Но тогда вы пытаетесь: EventTypeId содержит (1,3)

Решение состоит в том, чтобы сделать то, что вам действительно нужно в SQL, в синтаксисе contains, но переверните его: вы должны искать (1,3) содержит EventTypeId

Итак, создайте список int с конкретными идентификаторами EventType, которые вы ищете. А затем отфильтруйте все записи, где EventTypeId является частью списка идентификаторов

List<int> eventTypeIds = new List<int>();
eventTypeIds.Add((int)EventTypeId.Blah);
eventTypeIds.Add((int)EventTypeId.Whoo);

From M in dbx.MainTable Where eventTypeIds.Contains(M.EventTypeId)
1 голос
/ 24 февраля 2010

Никогда не пробовал что-то подобное, но проверяли ли вы, работает ли оно, приводя перечисления к целым числам, как показано ниже?

(int)EventTypeID.Blah

Извините, больше ничего не могу поделать, не пытаясь для себя, что сейчас невозможно.

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