1

のユーザーがいDBSet<User>ます。各ユーザーには一連DBSet<Activity>のアクティビティがあります。各アクティビティ自体には、名前付きのカテゴリが 1 つまたはまったくありません。

public class User
{
    [...]
    DBSet<Activity> activity {get;set;}
}

public class Activity
{
    [...]
    Category category{get;set;}
}

public class Category
{
    [...]
    string Name {get;set;}
}

ここで、すべてのユーザーのリストを、アクティビティ内の特定のカテゴリ名の出現回数で並べ替えたいと考えています。つまり、カテゴリ内のアクティビティの数で並べ替えられたユーザーのリストが必要です。LINQ (ラムダ式) でそれを行うにはどうすればよいですか?

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 に答える