我有以下代码:
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查询中选择a
或b
,无论哪个是第一个。我该怎么做呢?
(我知道有很多方法可以做到这一点,例如首先尝试获取a
并进行空检查,等等b
。这会产生一些丑陋的代码。我也知道使用Concat
组合两个集合。)
答案 0 :(得分:3)
看起来你只是想找到匹配的第一个,你最好的选择应该是Concat()
收藏并返回第一场比赛:
ObjectOneCollection.Cast<ISomeInterface>()
.Concat(ObjectTwoCollection.Cast<ISomeInterface>())
.FirstOrDefault(a => a.Key == key);