我有界面:
public interface IBase
{
Guid Id { get; set; }
string ObjectName { get; set; }
string Val { get; set; }
}
以及实现此接口的几个类
public class A : IBase
{
Guid Id { get; set; }
string ObjectName { get; set; }
string Val { get; set; }
}
public class B:IBase
{
Guid Id { get; set; }
string ObjectName { get; set; }
string Val { get; set; }
}
我也有DTO
课程
public class CdcDto
{
public List<A> A { get; set; }
public List<B> B { get; set; }
public List<IBase> UnionAB => A.Union(B).ToList();
}
在DTO
我收到错误:
List<A>
不包含“UNION”的定义和最佳定义 扩展方法重载IQueryable.Union<B>(IQueryable<B>, IEnumerable<B>)
需要类型为IQueryable<B>
的接收器
一个澄清。联合的类别不止两个。如何更好地结合这些类?我不想比较这些课程。我只想在union all
中使用SQL
。
答案 0 :(得分:3)
试试这个:
public List<IBase> UnionAB => A.Union<IBase>(B).ToList();
答案 1 :(得分:3)
错误消息告诉您Union
:
需要'IQueryable&lt;类型'的接收器B&gt;'
因此您需要将A转换为Ibase
类型:
public List<IBase> UnionAB => A.Cast<IBase>().Union(B).ToList();
或B:
public List<IBase> UnionAB => A.Union(B.Cast<IBase>()).ToList();
或者第三种方法是将通用类型参数指定为IBase
,它将指定结果类型并匹配您的属性:public List<IBase> UnionAB
public List<IBase> UnionAB => A.Union<IBase>(B).ToList();
答案 2 :(得分:2)
你可以尝试:
public List<IBase> UnionAB = new List<IBase>(A);
UnionAB.AddRange(B);