2017-08-24 3 views
1

私はインターフェイスしている:また、私はDTODTOクラス1つのinterfaseから継承した異なるタイプの汎用リストをどのように組み合わせるとよいでしょうか?

public class CdcDto 
{ 
public List<A> A { get; set; } 
public List<B> B { get; set; } 
public List<IBase> UnionAB => A.Union(B).ToList(); 
} 

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; } 
} 

このintefaceをを実装するいくつかのクラスを持って、私はエラーを取得:

List<A> Does not contain a definition for 'UNION' and the best extension method overload IQueryable.Union<B>(IQueryable<B>, IEnumerable<B>) requires a receiver of type IQueryable<B>

1つの説明。組合のクラスは2つ以上です。どのようにこのクラスを組み合わせる?私はクラスを比較したくないです。 SQLのようなunion allがほしいだけです。

答えて

2

あなたは試みることができる:エラーメッセージがUnionことを示しています

public List<IBase> UnionAB => A.Union<IBase>(B).ToList(); 
3

はこれを試してみてくださいタイプ:

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(); 
3

requires a receiver of type 'IQueryable< B >'

ので、あなたがIbaseにキャストする必要があるのいずれか

public List<IBase> UnionAB = new List<IBase>(A); 
UnionAB.AddRange(B); 
関連する問題