Лямбда-оператор 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 означало бы возвращать те строки, где пересечение привело к любой строке.

Другие вопросы по тегам