投影到(列表)具体对象而不是(列表)匿名对象
Project into a (list of) concrete object instead of an (list of) anonymous object
简化后的问题如下:在Entity Framework我正在做一个涉及3个表的连接,并返回连接的结果集,其中涉及3个表中的(一些)字段。
var query = (
from t1 in dbCtx.TB_Entity1
from t2 in dbCtx.TB_Entity2
.Where(p => p.someCol == t1.someCol && t.IsActive == true)
.DefaultIfEmpty() //LEFT JOIN
from t3 in dbCtx.TB_Entity3
.Where(q => q.someCol == t2.someCol)
where t1.IsLatest == true
&& (t1.istatus == 2
|| t1.istatus == 3
)
select new {
t1.col100,
t1.col101,
t2.col200,
t2.col201,
t3.col300,
t3.col301
}).OrderByDescending(t1 => t1.ID);
var anonObjList = query.ToList();
因此,在查询结束时,我将投影写到 select 我想要的字段。
最后我 运行 使用 .ToList() 进行查询并获得匿名对象列表。
如何修改查询以投影到 MyConcreteClass 列表中
即我希望能够写出类似于
的东西
List<MyConcreteClass> myObjList = query.ToList();
你可以假设我的混凝土 class 看起来像
public class MyConcreteClass
{
public string Col100 { get; set; }
public string Col101 { get; set; }
public string Col200 { get; set; }
public string Col201 { get; set; }
public string Col300 { get; set; }
public string Col301 { get; set; }
}
您只需使用对象初始化语法:
new MyConcreteClass
{
Col100 = t1.col100,
Col101 = t1.col101,
Col200 = t2.col200,
Col201 = t2.col201,
Col300 = t3.col300,
Col301 = t3.col301
}
简化后的问题如下:在Entity Framework我正在做一个涉及3个表的连接,并返回连接的结果集,其中涉及3个表中的(一些)字段。
var query = (
from t1 in dbCtx.TB_Entity1
from t2 in dbCtx.TB_Entity2
.Where(p => p.someCol == t1.someCol && t.IsActive == true)
.DefaultIfEmpty() //LEFT JOIN
from t3 in dbCtx.TB_Entity3
.Where(q => q.someCol == t2.someCol)
where t1.IsLatest == true
&& (t1.istatus == 2
|| t1.istatus == 3
)
select new {
t1.col100,
t1.col101,
t2.col200,
t2.col201,
t3.col300,
t3.col301
}).OrderByDescending(t1 => t1.ID);
var anonObjList = query.ToList();
因此,在查询结束时,我将投影写到 select 我想要的字段。
最后我 运行 使用 .ToList() 进行查询并获得匿名对象列表。
如何修改查询以投影到 MyConcreteClass 列表中
即我希望能够写出类似于
的东西List<MyConcreteClass> myObjList = query.ToList();
你可以假设我的混凝土 class 看起来像
public class MyConcreteClass
{
public string Col100 { get; set; }
public string Col101 { get; set; }
public string Col200 { get; set; }
public string Col201 { get; set; }
public string Col300 { get; set; }
public string Col301 { get; set; }
}
您只需使用对象初始化语法:
new MyConcreteClass
{
Col100 = t1.col100,
Col101 = t1.col101,
Col200 = t2.col200,
Col201 = t2.col201,
Col300 = t3.col300,
Col301 = t3.col301
}