0

私は共有ポイントのリストを持っています。これを学生と呼びましょう。

name  | surname | username
------|---------|---------- 
test  | test1   | test11
test2 | test2   | test22
test3 | test3   | test33

マネージャーに基づいて学生の名前を保持し、共有ポイントのリストに追加します。

String.Join(",", ListBox2.Items.Cast<ListItem>().Select(i => i.Text).ToArray());

そして、私は別のリストを持っています

manager | students      
--------|---------------
man1    | test11,test22 
man2    | test33,test11 

だから私が必要とするのは、カウンターテーブルの各学生のマネージャー数です。

studentuName     |   count
-----------------|---------
test11           |    2
test22           |    1
test33           |    1

私はそれらをリストとして呼び出します(それらを呼び出すにはもっと良い方法があります。例を挙げているだけです)

List<string> students (has value "test11", "test22", "test33")
List<string> manages (has value "test11,test22" , "test33,test11")

では、linq を使用して、各学生が何人のマネージャーを持っているかをどのように取得できますか?

ありがとうございました


編集 @Servy の回答で取得できます

List<string> managers = new List<string> { "a,b", "a,b,c,d", "a,c", "c,d,f", "a,f,c,b" }; 

var query = managers.SelectMany(manager => manager.Select(student => new { manager, student })); 

var finalQuery = query.GroupBy(pair => pair.student).Select(group => new { Student = group.Key, Count = group.Count() });

また、コンマ「、」の数も返されます。これを回避する方法はありますか? また、それらを単一のクエリでマージする方法はありますか?

4

2 に答える 2

0

これを試して。私はそれがあなたが達成しようとしていることだと思います:

  List<string> Students = new List<string>() { "Test1", "Test2" };
  List<string> Manager = new List<string>(){"Test1","Test1","Test3"};

            var counter = Manager.Count(m => m == Students[0]);
            Console.WriteLine(counter);
            Console.ReadLine();

これにより、リスト内の各学生を通過するループを作成し、関連するマネージャーの数を取得できます

于 2013-11-05T18:06:40.810 に答える