LINQ选择和排序有不同的关系

时间:2013-04-30 13:57:56

标签: c# linq entity-framework

我有DBSet<User>个用户。每个用户都有DBSet<Activity>个活动。每个活动本身都有一个或没有名称的类别。

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(???);

3 个答案:

答案 0 :(得分:3)

这应该适合你:

string cat="myCategory";
DBSet<User> users;
    var usersByCategory = users
             .OrderBy(e=> e.activity.Count(a => a.Categories.Name.Contains(cat)));

答案 1 :(得分:1)

类似的东西:

DBSet<User> users;
string cat = "myCategory";
var usersByCategoryActivity = users
             .OrderByDescending(u => u.Activities
                            .Where(a => a.Categories.Select(c => c.Name)
                                                    .Contains(cat)
                            .Count()
                     );

如果首先查看查询内部,它将检索包含给定类别的所有活动。它为用户计算一切,然后按顺序排列 我不确定这是你需要的,但你的描述不准确,并且没有数据样本。所以它可能足够好了。也许不是。

答案 2 :(得分:0)

也许

var usersByCategory = users.ToList().OrderBy(e=>e.activity.Count());