我想从联合表的列中提取所有int
ID并将其存储在ViewModel类的属性中。
注意:Categorisation
是Foo
和Bar
实体类的映射表。在这种情况下,我只过滤Id
Foo
个。{/ p>
var model = _ctx.FooDbSet.Where(y => y.Id == x.Id).Select(x => new FooManageVM
{
// ... other attributes here
CategorisationIds = _ctx.CategorisationDbSet.Where(w => w.Foo.Id == id).Select(s => s.Foo.Id).ToArray()
}).Single();
虽然最后有.ToArray()
方法(.ToArray<int>()
也不起作用),但我收到此错误:
LINQ to Entities does not recognize the method 'Int32[] ToArray[Int32](System.Collections.Generic.IEnumerable`1[System.Int32])' method, and this method cannot be translated into a store expression.
我尝试将查询提取到上面,例如:
var ids = _ctx.CategorisationDbSet.Where(w => w.Foo.Id == id).Select(s => s.Foo.Id);
然后在下面:
// this is of type int[]
CategorisationIds = ids.ToArray()
但这也不起作用。
答案 0 :(得分:1)
我认为最简单的方法是将CategorisationsIds的类型更改为IEnumerable<int>
。
另外,请检查您是否引用了System.Linq
但如果这不起作用,您可以查询匿名对象并使用.Single()的结果实例化FooManageVM:
var result = _ctx.FooDbSet.Where(y => y.Id == x.Id).Select(x =>
{
// ... other attributes here
CategorisationIds = _ctx.CategorisationDbSet.Where(w => w.Foo.Id == id).Select(s => s.Foo.Id)
}).Single();
var model = new FooManageVM {
// ... other attributes here
CategorisationIds = result.CategorisationIds.ToArray();
}
答案 1 :(得分:0)
将.ToArray()
电话移至主要查询
尝试:
var ids = _ctx.CategorisationDbSet.Where(w => w.Foo.Id == id).Select(s => s.Foo.Id).ToArray();
然后:
CategorisationIds = ids;
答案 2 :(得分:-2)
首先使用ToList():
.Select(s => s.Foo.Id).ToList().ToArray()
当您使用ToList从DB提取的记录并准备好作为linq对象时。