Что такое эквивалент SQL в предложении здесь? - PullRequest
1 голос
/ 16 августа 2010

Я новичок в LINQ и занимаюсь этим часами. У меня есть список <> объектов, где одним из свойств объектов является список выбранных категорий. У меня также есть, кроме объектов, список, представляющий подмножество категорий, и я хочу вернуть все объекты, которые содержат по крайней мере одну категорию, которая также находится в подмножестве, как показано в следующем псевдокоде (а не в моем реальном коде)

List<string> subset = cat, dog, mouse

List<myclass> myclasses = 
   {name:alphie, category:[cat,elephant]},{name:sally, category:[fish]}, {name:bob, category:[dog, mouse]}

В приведенном выше примере мне нужно вернуть alphie и bob, поскольку у них обоих есть хотя бы одна категория из моего подмножества.

Единственное решение на данный момент - получить список обоих, а затем использовать дорогие циклы foreach для просмотра и сравнения. Я уверен, что LINQ должен предоставить более эффективный способ добиться того же?

Подробнее (я думаю, что мой псевдокод недостаточно подробен)

public class RadioProgram {
   ...
   private List<string> _category = new List<string>();
   public List<string> Category { get { return _category; } set { _category = value; }         }
   ...
}

public class Category {
   ...
   private string _categoryName = "";
   private List<Category> _subCategories = new List<Category>();
   public string CategoryName { get { return _categoryName; } set { _categoryName = value; } }
   public List<Category> SubCategories { get { return _subCategories; } set { _subCategories = value; } }
   ...
}

У меня есть метод GetCategories (string parentCategory), который возвращает все дочерние categoryNames в виде List. Каждая радиопрограмма.Категория (да, имя должно быть преобразовано во множественное число) сама является списком и может содержать ноль, одно или несколько имен категорий. Я получаю свой основной список радиопрограмм и хочу вернуть подмножество, содержащее, где каждый содержит хотя бы одно categoryName, соответствующее набору из GetCategories.

Я стараюсь избегать изменения архитектуры приложения (которое является потенциальным решением), поскольку это требует значительного рефакторинга существующей функциональности, и я думаю, что это хорошее упражнение для решения и понимания LINQ.

1 Ответ

3 голосов
/ 16 августа 2010

Вы можете использовать только одну вещь:

myclasses
    .Where(o => o.category.Any(c => subset.Contains(c)));
...