RWe*_*ndi 6 .net c# linq linq-to-sql
请考虑以下代码
IQueryable<FooBar> fooBarQuery = _fooBar;
IQueryable<FooBaz> fooBazQuery = _fooBaz;
IQueryable<IFoo> mergedQuery = _fooBar.Cast<IFoo>().Concat(_fooBaz.Cast<IFoo>());
Run Code Online (Sandbox Code Playgroud)
以上将合并_fooBar和_fooBaz.但是,合并查询列表中的对象类型将全部更改为FooBar.如果我将concat(_fooBaz concat转换为_fooBar),对象类型将更改为FooBaz.
我相信,由于这个随后的mergedQuery连接会抛出这个错误:"Union或Concat中的类型以不同的顺序分配成员."
任何人都可以帮我如何合并不同子类型的多个IQueryable列表?
解决方案是使用中间对象:
interface IFoo
{
int PorpertyA { get; }
int PorpertyB { get; }
...
}
class FooImpl : IFoo
{
public int PorpertyA { get; set; }
public int PorpertyB { get; set; }
...
}
IQueryable<IFoo> mergedQuery =
fooBarQuery.Select(x => new FooImpl {
PropertyA = x.PropertyA,
PropertyB = x.PropertyB
...
})
.Union(fooBazQuery.Select(x => new FooImpl {
PropertyA = x.PropertyA,
PropertyB = x.PropertyB
...
});
Run Code Online (Sandbox Code Playgroud)
你是这个意思?
List<FooBar> list = new List<FooBar>
{
new FooBar{ r=1},
new FooBar{ r=2},
new FooBar{ r=3},
};
List<FooBaz> list2 = new List<FooBaz>
{
new FooBaz{ z=4},
new FooBaz{ z=5},
new FooBaz{ z=6},
};
IQueryable<IFoo> fooBarQuery = list.AsQueryable();
IQueryable<IFoo> fooBazQuery = list2.AsQueryable();
IQueryable<IFoo> mergedQuery = fooBarQuery.Concat(fooBazQuery);
foreach (var obj in mergedQuery)
Console.WriteLine(obj);
}
interface IFoo
{ }
class FooBar:IFoo {
public int r { get; set; }
}
class FooBaz : IFoo
{
public int z { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6114 次 |
| 最近记录: |