在对象列表中找到第一个匹配的字符串值

时间:2019-04-03 12:11:52

标签: c# linq

我有一个strings的列表,例如:myList 然后我还有一个对象列表,例如myDbObjectsList 该对象看起来像这样:

public class MyDbObjects
{  
    public string FirstName { get;set;}
    public string LastName {get;set;}
    public int ID {get;set;}
}

我想知道myList(上面的第一个)中是否有两个成员,其中一个的值等于 FirstName ,另一个的值等于等于我myDbObjectsList中同一对象上的姓氏

我用一种明显的方法for-each来解决了这个问题,并检查了它是否等于这个,是否等于那个,等等,但是我认为人们应该有一种更有效的方法比我想象的还要聪明?

1 个答案:

答案 0 :(得分:3)

要加快搜索速度,您可以将myList中的所有字符串放入哈希集中:

var hashSet = new HashSet<string>(myList);

现在要检查myDbObjects中是否有任何对象,您可以使用Any

var isAny = myDbObjects.Any(x => hashSet.Contains(x.FirstName) && hashSet.Contains(x.LastName));

如果要获取这些对象,请使用Where

var objectsThatMatch = myDbObjects
  .Where(x => hashSet.Contains(x.FirstName) && hashSet.Contains(x.LastName));