我有一个DBSet<User>
的用户。每个用户都有一个DBSet<Activity>
的活动。每个活动本身有一个或没有名称的类别。LINQ选择和排序关系不同
public class User
{
[...]
DBSet<Activity> activity {get;set;}
}
public class Activity
{
[...]
Category category{get;set;}
}
public class Category
{
[...]
string Name {get;set;}
}
现在我想拥有一个所有用户的列表按活动中给定类别名称的出现次数排序。换句话说:我想要一个用户列表,按他的活动数量排序。我怎么能用LINQ(lambda表达式)做到这一点?
DBSet<User> users;
string cat="myCategory";
var usersByCategoryActivity = users.OrderByDescending(???);
谢谢。我还需要在Count之前添加'where(a => a.Category!= null)',因为类别也可以为null。但是,这是解决方案 – daniel 2013-04-30 14:16:44
@zoidbergi只需将Where谓词添加到已经有如此谓词的Count中即可。 .OrderBy(e => e.activity.Count(a => a.Category!= null && a.Categories.Name.Contains(cat))); – 2013-04-30 14:18:19
这比嵌套的.Where快吗? – daniel 2013-04-30 14:19:01