[英]Linq where list contains one of list
我有和數組對象是一個
List<ContactModel> contactList;
public class ContactModel
{
public string CustomKey { get; set; }
public string[] ContactGroups { get; set; }
}
所以對象就是
{"1", {"Group A"} }
{"2", {"Group A", "Group B", "Group C"} }
{"3", {"Group C", "Group D"} }
{"4", {"Group A", "Group B", "Group C", "Group D"} }
ContactGroups包含給定聯系人所在的組{“組A”,“組B”,“組C”,“組D”}的列表。我可以使用以下內容獲得一個組的結果。
var selectedContracts =
from contact in contacts
where contact.ContactGroups.Contains("Group A")
select new { contact.CustomKey, contact.ContactGroups };
有沒有辦法讓所有包含對象列表的對象返回列表。
var selectedContracts =
from contact in contacts
where contact.ContactGroups.Contains("Group A", "Group B")
select new { contact.CustomKey, contact.ContactGroups };
我需要回到對象1,2,4。
目標方法:
public static IEnumerable<ContactModel> SelectContacts(
List<ContactModel> contacts, string[] targetGroups)
{
return from contact in contacts
where targetGroups.Any(targetGroup =>
contact.ContactGroups.Contains(targetGroup))
select contact;
}
用法示例:
void Run()
{
Initial();
var selectedContacts = SelectContacts(contactList,
new[] { "Group A", "Group B" });
PrintContacts(selectedContacts);
}
幫助方法:
void Initial()
{
contactList = new List<ContactModel>
{
new ContactModel
{
CustomKey = "1",
ContactGroups = new[] { "Group A" }
},
new ContactModel
{
CustomKey = "2",
ContactGroups = new[] { "Group A", "Group B", "Group C" }
},
new ContactModel
{
CustomKey = "3",
ContactGroups = new[] { "Group C", "Group D" }
},
new ContactModel
{
CustomKey = "4",
ContactGroups = new[] { "Group A", "Group B", "Group C", "Group D" }
},
};
}
void PrintContacts(IEnumerable<ContactModel> contacts)
{
foreach (var selectedContract in contacts)
Console.WriteLine(selectedContract.CustomKey);
}
這將返回1,2和4:
var objects = new string[] { "Group A", "Group B" };
var selectedContacts = contactList.Where(contact => objects
.Any(obj => contact.ContactGroups.Contains(obj)));
不確定這是否是您正在尋找的
測試:
var contactList = new List<ContactModel> { new ContactModel {CustomKey = "1", ContactGroups = new[]{"Group A"} },
new ContactModel {CustomKey ="2", ContactGroups = new[]{"Group A", "Group B", "Group C"} },
new ContactModel {CustomKey ="3",ContactGroups = new[] {"Group C", "Group D"} },
new ContactModel {CustomKey ="4", ContactGroups = new[]{"Group A", "Group B", "Group C", "Group D"}},
new ContactModel {CustomKey ="5", ContactGroups = new[]{"Group A", "Group C", "Group D"}},
new ContactModel {CustomKey ="6", ContactGroups = new[]{ "Group D"}},
new ContactModel {CustomKey ="7", ContactGroups = new[]{"Group C"}},};
var CheckFor = new List<string>{"Group A", "Group B"};
var selectedContracts =
from contact in contactList
where contact.ContactGroups.Any(x => CheckFor.Contains(x))
select new { contact.CustomKey, contact.ContactGroups };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.