除了使用更多linq库的方法之外,我还有两个不同的项目。两个项目之间唯一共同点是名为Symbol的单个字符串。第1项是元组列表,第2项是我用linq打开的数据库表
第1项:
Tuple<string Symbol, string Market, List<Class1>, List<Class2>>
第2项:
List<TableClass>
TableClass {
string Symbol;
decimal Price;
bool isSold; }
这是我尝试过的代码。我试图返回Item1中不存在于Item2中的所有元素:
Item1.ExceptBy(Item2.Select(k => k.Symbol), e => e.Symbol);
这不起作用,因为Item1和Item2是完全不同的类型
方法的类型参数&#39; MoreEnumerable.ExceptBy(IEnumerable,IEnumerable,Func)&#39;无法从使用中推断出来。尝试指定类型 明确的论点。
答案 0 :(得分:1)
我保留一个扩展方法,方便做左外连接:
public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(
this IEnumerable<TLeft> leftSeq,
IEnumerable<TRight> rightSeq,
Func<TLeft, TKey> keySelectorLeft,
Func<TRight, TKey> keySelectorRight,
Func<TLeft, TRight, TResult> projectionSelector)
{
return leftSeq
.GroupJoin(
rightSeq,
keySelectorLeft,
keySelectorRight,
(leftItem, rightItems) => new { leftItem, rightItems })
.SelectMany(
x => x.rightItems.DefaultIfEmpty(),
(x, rightItem) => projectionSelector(x.leftItem, rightItem));
}
现在我们可以:
tuples.LeftOuterJoin(list, t => t.Symbol, k => k.Symbol, (t,k) => (t,k))
.Where(x => x.k == null)
.Select(x => x.t)
...这将为我们提供元组列表中的所有项目,其中Symbol
属性在另一个列表中没有相应的项目,且具有相同的Symbol
。正确?