【问题标题】:What is the eqivalent to a SQL "in" clause here?什么相当于这里的 SQL“in”子句?
【发布时间】:2010-08-15 21:23:41
【问题描述】:

我是 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 作为列表返回。每个 radioProgram.Category(是的,名称需要重构为复数)本身就是一个 List,并且可能包含零个、一个或多个 categoryNames。我正在获取我的 radioPrograms 主列表,我想返回一个子集,其中每个子集都包含至少一个与 GetCategories 中的集合匹配的 categoryName。

我试图避免更改应用程序的架构(这是一个潜在的解决方案),因为这意味着对现有功能进行大量重构,我认为这恰好是处理和理解 LINQ 的一个很好的练习。

【问题讨论】:

    标签: c# linq-to-objects


    【解决方案1】:

    你可以使用的一件事是

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

    【讨论】:

    • 谢谢,我遇到过类似的解决方案,但我认为它们没有奏效,我认为这是因为我需要先以某种方式加入这两个列表。我已经用更多细节扩展了我的原始帖子。
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2013-09-30
    • 2013-01-03
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多