LINQ,如何指定包含List<>中的项目

时间:2011-04-01 09:53:12

标签: linq linq-to-sql

好的,我正在尝试从我的数据库中找到属于我提供的类别的所有子类别(使用查询结果整形)。我的班级SubCategory包括一个List<>类别。

问题是在linq语句中,g指的是SubCategory(最后它包含Categories<>)。因此,不允许使用以下声明。

如何更改Linq语句以生成正确的SQL查询,以包含包含匹配类别的所有SubCategories。

 public class SubCategory

    {
        public int SubCategoryId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public List<Article> Articles { get; set; }
        public List<Category> Categories { get; set; }
    }

//incorrect code below:
var SubCategories = storeDB.SubCategories.Include("Categories").Single(g => g.Name == category);

3 个答案:

答案 0 :(得分:1)

我发现每个SubCategory可以属于多个类别有点令人困惑 - 你是否有正确的关系?

无论如何,我认为如果你将选择改为首先在类别上工作,它可能更具可读性 - 例如:

var subCatQuery   = from cat in storeDB.Categories
                    where cat.Name == category
                    select cat.SubCategories;

然后您可以执行以获取您的IEnumerable&lt;&gt;:

var subCategories = subCatQuery.ToList();

我发现更具可读性/可理解性。


(我也发现这里的查询语法比流畅的样式更容易阅读)

答案 1 :(得分:1)

这对我有用(可能太简单了):

var Category = storeDB.Categories.Include("SubCategories").Single(c => c.Name == category);
return Category.SubCategories;

答案 2 :(得分:0)

我的首选答案是使用linq连接。如果不存在2个数据集,则可以使用linq操作.join.groupjoin vs一个from语句。这将是我的方法。

    Dictionary<MainQuery, List<subQuery>> Query = 
    dbStore.List<MainQuery>.include("IncludeAllObjects")
    .groupjoin(db.List<SubTable>.Include("moreSubQueryTables"), 
    mainQueryA=>mainQueryA.PropToJoinOn,
    subQueryB => sunQueryB.PropToJoinOn,
    ((main, sub)=> new {main, sub})
    .ToDictionary(x=>x.main, x=>x.sub.ToList());