1

我有一个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(???);
4

3 回答 3

3

这应该适合你:

string cat="myCategory";
DBSet<User> users;
    var usersByCategory = users
             .OrderBy(e=> e.activity.Count(a => a.Categories.Name.Contains(cat)));
于 2013-04-30T14:07:21.033 回答
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()
                     );

如果您首先查看查询内部,它会检索包含给定类别的所有活动。它为用户计算所有内容,并按此排序。
我不确定这是您需要的,但您的描述不准确,也没有数据样本。所以它可能已经足够好了。也许不吧。

于 2013-04-30T14:05:26.513 回答
0

也许

var usersByCategory = users.ToList().OrderBy(e=>e.activity.Count());
于 2013-04-30T14:02:41.987 回答