2017-05-30 18 views
1

特定の日付の従業員に割り当てられた部門をリストを使用して検索したいと思います。 従業員IDと日付の組み合わせは、従業員が特定の日付に1つの部門にのみ割り当てられることを意味します。リストを検索<T>キーの組み合わせを検索してC#

List<clsEmployee> _items = new List<clsEmployee>(); 

_items.Add(new clsEmployee() 
{EmpId=100,Date="05/05/2017",DeptAssigned="Grocery"}); 
_items.Add(new clsEmployee() 
{EmpId=100,Date="06/05/2017",DeptAssigned="Clothing"}); 
_items.Add(new clsEmployee() 
{EmpId=100,Date="07/05/2017",DeptAssigned="Crockery"}); 

_items.Add(new clsEmployee() 
{EmpId=101,Date="05/05/2017",DeptAssigned="cosmetics"}); 
_items.Add(new clsEmployee() 
{EmpId=101,Date="06/05/2017",DeptAssigned="gardening"}); 
_items.Add(new clsEmployee() 
{EmpId=101,Date="07/05/2017",DeptAssigned="grocery"}); 


    clsEmployee objEmployee = new clsEmployee(); 
    objEmployee = _items.Find(x => x.EmpId == 100); 
//i want something like objEmployee = _items.Find(x => x.EmpId==100 
//&& x => x.Date="05/05/2017"); 
string DeptAssignedToEmp = objEmployee.DeptAssigned; 
//expected result - grocery in this case. 
+0

補足説明:ちょっとした提案: DeptAssignedを単純な文字列として使用することは安全です。少なくともより良い列挙型の定数を使用してください。 このようにして、タイプミスや大文字と小文字の区別の問題を避けることができます –

+1

文字列を使用して日付を表現しません – Steve

答えて

5

シンプル、あなたはまた、LINQを使用することができます別のx =>

clsEmployee objEmployee = _items.Find(x => x.EmpId == 100 && x.Date == "05/05/2017"); 

なし&&を使用します。

clsEmployee objEmployee = _items.FirstOrdefault(x => x.EmpId == 100 && x.Date == "05/05/2017"); 

サイドノート:日付プロパティが、DateTimeのための文字列を使用しないでください。

0

Findは理論的にはあなたの批判に合ったアイテムがもっと多いかもしれないので、使用には最適ではないかもしれません。おそらくあなたは、あなたの条件に一致するセットでより多くのアイテムがあるかもしれないから、Where

var matchingItems = _items.Where(x => x.EmpId==100 && x.Date=="05/05/2017"); 

WhereIEnumerableを返す使用することを検討すべきです。

FirstOrDefaultを使用できます。一致するアイテムがコレクションにない場合はnullが返されますが、それ以外の場合はコレクションの最初のオブジェクトが返されます。

var matchingItem = _items.FirstOrDefault(x => x.EmpId==100 && x.Date=="05/05/2017"); 
if(matchingItem == null) 
{ 
    //nothing matched your criteria 
} 
+0

元の質問から貼り付けをコピーするときは注意が必要です –

+4

'Where'の後に' FirstOrDefault'があるのはなぜですか?なぜFirstOrDefaultだけではないのですか? –

+1

代わりに 'FirstOrDefault(x => x.EmpId == 100 && x.Date ==" 05/05/2017 ")'を実行するだけで済みます。 – juharr

関連する問題