interval
^我有类似的东西,但我想知道的是,在同一个选择中是否有添加第二个对象创建的方法?例如。新的MyObject(p.field3,p.field4)?并将其添加到相同的列表?订单没关系。
我知道可以通过多次调用数据库或将列表拆分为多个部分来完成此操作,但有没有办法在单行中执行此操作?
答案 0 :(得分:3)
您可以将其创建为元组。
<paper-drawer-panel responsive-width="800px">
从我在Linqpad的测试中看来,这只会打到数据库一次。
或者,您可以从数据库中选择您需要的所有字段来创建两者:
List<Tuple<MyObject1, MyObject2>> = query.Select(x => Tuple.Create(
new MyObject1
{
// fields
},
new MyObject2
{
//fields
}))
.ToList();
答案 1 :(得分:2)
您想要做的是使用linq中的SelectMany方法。这将选择数组中的所有项目。可以匿名创建阵列,如下所示。
List<MyObject> objects = await item.tables.ToAsyncEnumerable()
.Where(p => p.field1 == value)
.SelectMany(p => new []{new MyObject(p.field1,p.field2), new MyObject(p.field3,p.field4)})
.ToList();
希望能解决你的问题!
答案 2 :(得分:1)
您可以尝试创建一个对象数组,然后使用SelectMany
展平:
List<MyObject> objects = await item.tables.ToAsyncEnumerable()
.Where(p => p.field1 == value)
.Select(p => new [] {
new MyObject(p.field1,p.field2),
new MyObject(p.field3,p.field4)
})
.SelectMany(g => g)
.ToList();
但我怀疑你在将EF翻译成查询时遇到问题。
答案 3 :(得分:1)
如果使用查询语法而不是方法链接,则可以使用let
运算符来完成此操作。请注意,生成的SQL可能与this article显示的不完全一致,但如果您在子查询之后,它应该适合您。