好的,我正在尝试从我的数据库中找到属于我提供的类别的所有子类别(使用查询结果整形)。我的班级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);
答案 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());