В EF Core 2.2 у меня есть объекты со свойствами массива string[]
, где в ApplicationDbContext они получаются с:
modelBuilder.Entity<FruitBasket>()
.Property(e => e.FruitTypes)
.HasConversion(
v => string.Join(',', v),
v => v.Split(',', StringSplitOptions.RemoveEmptyEntries));
Например, циновка объекта содержится в столбце FruitType массив strning: {"Apple", "Banana", "Orange"}
сохранен в базе данных как: Apple,Banana,Orange
Я пытаюсь найти в моей БД все объекты, содержащие любую строку из моей входной строки, скажем, любой из:
string[] BasketSearchedFruitTypes = new string[] { "Apple", "Grapefruit", "Pineaple" }
Мой IQueryable:
IQueryable<BasketModel> baskets = GetBasketsQueryable(); //BasketModel contains FruitType string[] prop
Для поиска сущностей у меня сейчас есть LINQ, который говорит:
if (search.BasketSearchedFruitTypes != null && search.BasketSearchedFruitTypes.Length != 0)
baskets = baskets
.Where(data => search.BasketSearchedFruitTypes
.Any(x => data.FruitType
.Contains(x)));
К сожалению, мне ничего не возвращается, и у меня закончились идеи.
РЕДАКТИРОВАТЬ 1: после использования выражения:
baskets = baskets
.Where(data => search.BasketSearchedFruitTypes
.Any(x => data.FruitType
.Contains(x)));
, когда я пытаюсь доставить его в Список <>, я получаю ArgumentNullException
. Также я не могу использовать foreach
, .Count()
на нем. То же самое я имею с:
var result = baskets.Where(data => search.BasketSearchedFruitTypes.Intersect(data.FruitType).Any();
EDIT 2: Я только что заметил, что foreach l oop проходит через возвращенный IQueryable, но в какой-то момент перерывы дают ArgumentNullException
. Даже try catch
внутри l oop не помогает ...
РЕДАКТИРОВАТЬ 3: На самом деле, когда я помещаю foreach
возвращенного IQueryable в try catch
, это временного решения, и он работает нормально. Но все же я не понимаю, почему происходит сбой при перечислении (цикл, а не код внутри l oop).