使用Linq选择A或B.

时间:2015-01-05 17:19:14

标签: c# linq

我有以下代码:

public interface ISomeInterface
{ 
  string Id { get; set; }
}

public class ObjectOne : ISomeInterface
{
  public string Id;
  // Other properties... 
}

public class ObjectTwo : ISomeInterface
{
  public string Id;
  // Other properties...
}

还有这个:

public class MyModel
{
  public List<ObjectOne> ObjectOneCollection;
  public List<ObjectTwo> ObjectTwoCollection;

  public ISomeInterface GetMatching(string key)
  {
    ISomeInterface result;

    result = from ISomeInterface a in ObjectOneCollection
             from ISomeInterface b in ObjectTwoCollection
             where a.Id == key || 
                   b.Id == key
             select new { a, b }; // This is where I'm having trouble.

    return result;
  } 

  // Other methods
}

我基本上试图在LINQ查询中选择ab,无论哪个是第一个。我该怎么做呢?

(我知道有很多方法可以做到这一点,例如首先尝试获取a并进行空检查,等等b。这会产生一些丑陋的代码。我也知道使用Concat组合两个集合。)

1 个答案:

答案 0 :(得分:3)

看起来你只是想找到匹配的第一个,你最好的选择应该是Concat()收藏并返回第一场比赛:

ObjectOneCollection.Cast<ISomeInterface>()
  .Concat(ObjectTwoCollection.Cast<ISomeInterface>())
  .FirstOrDefault(a => a.Key == key);