0

申し訳ありませんが、私はlinqに少し慣れていませんが、それが私が助けを必要としていることだと思います...

オブジェクトのリスト(タスクの従業員)があり、従業員オブジェクトの整数のリストとして専門分野があります。特定の専門分野を持つ従業員リストのみをフィルタリングできるようにする必要があります。しかし、私はまた、彼らが一致する専門分野の数によって従業員をランク付けできるようにしたいと思います。

私の考えは、(EmployeeID、Tag)を使用して、従業員タグごとに1つのエントリを持つリストを作成し、それを検索リストと結合して、従業員IDで集計し、タグをカウントしてから、カウントの降順で並べ替えることでした。

しかし、そのリストを作成する方法がわかりません。(EmployeeID、Tag)リストを取得するにはどうすればよいですか?

私は基本的に持っています:

従業員

  • 整数としてのEmployeeID
  • AreasOfExpertise as list(of Integer)

従業員IDとAreaOfExpertiseIDのリストが必要で、従​​業員の専門分野ごとに1つのエントリがあります。

誰かが私がそれをする方法を知っていますか?

ありがとう

4

3 に答える 3

1

これはあなたが探しているものですか?これにより、2 つのプロパティを持つ匿名型が作成されますが、必要な型を簡単に作成できます。

        var employees = new List<int>() { 1,2,3,4,5};
        var skills = new List<KeyValuePair<int, string>>() 
        { 
            new KeyValuePair<int, String>(1, "test"), 
            new KeyValuePair<int, string>(3, "test3"), 
            new KeyValuePair<int, string>(3, "test4") 
        };

        var list = 
        (
            from employee in employees 
            join skill in skills 
                on employee equals skill.Key 
            select new { employee, skill.Value }
        ).ToList();

編集:現在のコードの詳細については、プロパティにアクセスして結合を行う方法を示すいくつかのタイプを推測しました。更新する場合は、これをお客様のニーズに合わせて具体化させていただきます。

これは、あなたに役立つかもしれない結合構文の別の良い例です

乾杯、

于 2012-07-17T21:04:28.040 に答える
0

ここでの回答に関連することをしましたが、少し異なります。申し訳ありませんが、これは私のせいでした。私はこれに少し慣れておらず、役立つ情報を提供していませんでした。私はこれを持っていました:

Class Employee
    Public EmployeeID as Integer
    Public Skills as list(of Integer)
End Class

'Should turn a list of EmployeeID, MatchingSkillCount
Function FindEmployeesWithMatchingSkills(Employees as List(of Employee), SearchSkills as List(of Integer)) as IEnumerable(of KeyValuePair(of Integer, Integer))

End Function

しかし、私はそれを理解できませんでした。少し助けて、私はこれを思いつきました。これはうまくいくようです:

Function FindEmployeesWithMatchingSkills(Employees as List(of Employee), SearchSkills as List(of Integer)) as IEnumerable(of KeyValuePair(of Integer, Integer))
    Return (From e in Employees Select New KeyValuePair(Of Integer, Integer)(e.EmployeeID, e.Skills.Where(Function(s) SearchSkills.Contains(s)).Count)).OrderByDescending(Function(kvp) kvp.Value).Where(Function(kvp) kvp.Value > 0)
End Function

助けてくれてありがとう!

于 2012-07-18T15:44:32.337 に答える
0

これはあなたが探しているものですか?

var emplist = new List<Employee>
            {
                new Employee { EmployeeId = 1, AreaOfExpertieseId = new List<int>() { 1, 2, 3, 4 } },
                new Employee { EmployeeId = 2, AreaOfExpertieseId = new List<int>() { 1, 2 } },
                new Employee { EmployeeId = 3, AreaOfExpertieseId = new List<int>() },
                new Employee { EmployeeId = 4, AreaOfExpertieseId = new List<int>() { 1,4 } },
            };
        var expertiseId = new[] {2,3}; //ExpertiseIds you want to search;
        var emps = emplist.Where(e => e.AreaOfExpertieseId.Exists(id => expertiseId.Contains(id)))
            .Select(e => new {e.EmployeeId, Rank = e.AreaOfExpertieseId.Count }).ToList();
于 2012-07-17T22:16:33.730 に答える