У меня есть база данных в Azure, которую я создал с нуля (не используя код сначала в EF) и сделал столбец в одной из моих таблиц для представления Enum из моих классов C#.(Linq & EF) Где MyType = (int) Enum не работает
Перечисление является
public enum ItemType
{
Build,
Stock,
Shell,
Parts,
[Display(Name="All Vehicles")]
AllTypesOfVehicles
}
Я пытаюсь выбрать определенные записи в качестве EF Linq запросов с помощью этого перечисления в ИНЕКЕ. Я просто перечислил перечисление в его базовый тип данных int32, но он не возвращает мне результаты, которые я хочу.
var results = context.Items.Include(P => P.Manufacturer)
.Include(P => P.Category).Include(P => P.VehicleMake)
.Include(P => P.VehicleModel).Include(P => P.VehicleYear);
//Fetches specific type of item
if (TypeOfPart != StaticData.ItemType.AllTypesOfVehicles)
{
results.Where(P => P.Type == (int)TypeOfPart); //This does not work
}
else //fetches all vehicle types
{
results.Where(P => P.Type == 0 | P.Type == 1 | P.Type == 2);
}
Ожидается ли это в EF? Я знаю, что EF поддерживает Enum с первого подхода кода, но я не понимаю, почему это может вызвать проблему. Я вошел в свой портал Azure и написал ручной запрос, чтобы узнать, получу ли я результаты, которые я хотел, и я это сделал.
SELECT * FROM Items WHERE Type = 2
Это дало мне только результаты, которые были перечислены типа «Шелл». Даже hardcoding число 2 в предложение where в моем EF-запросе не дает мне результатов, которые я хочу. Я перепроверил свой код, чтобы убедиться, что я не переопределяю, что где-то где-то еще, и все кажется чистым. Просто, чтобы быть уверенным, что я даже позвонил .ToList() сразу после предложения where, но все еще получил плохие результаты.
Я не совсем уверен, что мне здесь не хватает ???
============ Редактировать после первого ответа =======================
var results = context.Items.Include(P => P.Manufacturer)
.Include(P => P.Category).Include(P => P.VehicleMake)
.Include(P => P.VehicleModel).Include(P => P.VehicleYear);
//Fetches specific type of item
if (TypeOfPart != StaticData.ItemType.AllTypesOfVehicles)
{
var part = (int)TypeOfPart;
results.Where(P => P.Type == part);
List<Item> t = results.ToList();
}
else //fetches all vehicle types
{
results.Where(P => P.Type == 0 | P.Type == 1 | P.Type == 2);
}
№ У меня есть транспортные средства и предметы в одном и том же столе. Они имеют одинаковые столбцы. Я различаю их, используя этот перечислитель, так что 0-2 - это разные типы транспортных средств, а 3 - предметы (автозапчасти) и 4 (никогда не сохраняется в db) просто означает выбор частей с значениями перечисления 0-2. Я обновил свой вопрос в соответствии с вашим ответом. Как видно на снимке экрана, переменная part имеет значение 0, но моя первая сущность имеет значение «Тип» 1. Я также вызывал список сразу после предложения where, чтобы устранить возможные кодовые икоты. – Adrian
Хорошо, я вижу, где проблема. 'results.Where()' не редактирует 'results' - он возвращает новый запрос с дополнительным условием. Вы должны вернуть его к «результатам», чтобы заставить его работать. – MarcinJuraszek
** Face Palm ** Ты потрясающий. – Adrian