LINQ to Entities - 使用过滤器对子集合进行排序

时间:2013-10-08 12:45:46

标签: c# linq entity-framework linq-to-entities

鉴于以下实体:

Question
 -string Title
 -ICollection<Tag> Tags

Tag
 -string Value
 -string TagType

如何根据给定Questions的{​​{1}} ValueTags进行排序?这里的问题是TagType可能有Question个给定的Tags。如果TagType有多个Question(在我的情况下大多不常见),我只关心第一个Tags

这是一个示例数据表输出,其中TagTypes有自己的列:

Tag

鉴于Title (Question.Title) | Topic (TagType) | Module (TagType) ----------------------------------------------------------- Question 1 | Algebra | Maths ,我可以向IQueryable<Question>发送什么表达式来实现我的目标?

2 个答案:

答案 0 :(得分:0)

Enumerable.OrderBy(x => x.Tags.Where(x => x.TagType == aTagType).First().Value);

答案 1 :(得分:0)

感谢@James提供的建议,但这不起作用。解决方案是使用MinMax对子集合的字段进行排序:

if (sortDescending)
{
    expr = q => q.Tags
        .Where(t => t.TagType.Equals(sortByTagType, StringComparison.CurrentCultureIgnoreCase))
        .Max(t => t.Value);
}
else
{
    expr = q => q.Tags
        .Where(t => t.TagType.Equals(sortByTagType, StringComparison.CurrentCultureIgnoreCase))
        .Min(t => t.Value);
}