簡體   English   中英

Linq查詢以從列表列表中獲取對象

[英]Linq query to get an object from list of lists

我有一個AccountContacts類,其中包含一個數據成員聯系人,該聯系人是類型ContactInfo的列表。

每個ContactInfo類都有兩個成員。 1.包含ContactTypes(字符串)的列表。2.一個Contact對象。

所以,看起來像

Class AccountContacts
{
  List<ContactInfo> Contacts;
}

Class ContactInfo
{
   List<string> ContactType;
   Contact UserContact;
}

現在,如果我有一個AccountContacts對象(ac),如何獲取一個Contact對象,其中ContactInfo中的ContactType列表包含一個特定的字符串。

順便說一下,每個ContactType列表都是不同的。 這樣一次就可以返回Contact對象。

我嘗試過這樣的事情。

Contact myContact = ac.Contacts.Find(c => c.ContactType.Contains("specificString")).UserContact;

我可以獲取myContact。 只想知道有沒有更好的方法?

您的代碼:

  • 您正在使用Find方法 ,如果與您的條件不匹配,即沒有與您的輸入匹配的ContactType ,則將產生null結果。

  • 調用.UserContact時,這將導致NullReferenceException ,因為您無法執行null.UserContact


更安全-檢查null

var contact = (ac.Contacts.Where(c => c.ContactType.Contains("specificString")).Select(c => c.UserContact)).FirstOrDefault();
  • 這使用Contains方法確定列表中是否Contains您要查找的字符串。

  • 如果找到匹配項,則將選擇Contact

  • 然后, FirstOrDefault將獲取第一條記錄或返回null

ac.Contacts
    .Where(x => x.ContactType.Contains("string"))
    .Select(x => x.UserContact)

這將返回以“ string”作為ContactType的聯系人列表。

如果可以保證它們與眾不同:

var contact = ac.Contacts.SingleOrDefault(c => c.ContractType.Contains("string"));
if (contact != null)
{
    var userContact = contact.UserContact;
}
else
{
    // handle not found situation
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM