Лямбда-оператор Intersect
Попытка обработать этот лямбда-запрос без использования foreach и т. Д. В настоящее время у меня есть таблица базы данных со столбцом, который содержит разделенный запятыми список строк. В основном это фильтр (это могут быть, например, "брюки, топы, футболки, перчатки"). В функции, которая запрашивает базу данных, в основном есть параметр, который принимает аналогичную строку.
Я не знаю, слишком ли я устала в данный момент и не могу это решить, но борюсь. Я знаю, что это будет Intersect, но не могу понять синтаксис.
В настоящее время у меня есть...
public static List<ItemListItem> GetItems(string filter = "")
{
var db = new dbConnection();
var results = (from i in db.Items
select i);
if (!string.IsNullOrEmpty (filter))
results = results.Where(x => x.Filters.Split(',').Intersect(filter.Split(',')) )
}
1 ответ
Тебе нужно Enumerable.Any
в конце вашего Intersect
лайк:
x.Filters.Split(',').Intersect(filter.Split(',')).Any()
Итак, ваш запрос будет:
results = results.Where(x => x.Filters.Split(',')
.Intersect(filter.Split(','))
.Any());
Enumerable.Where
потребует выражения, возвращающего bool
, Intersect
вернет IEnumerable<T>
а также Enumerable.Where
не принял бы это. Добавление Enumerable.Any
означало бы возвращать те строки, где пересечение привело к любой строке.