gpt4 book ai didi

c# - Linq-To-Entities 使用方法选择新对象

转载 作者:太空狗 更新时间:2023-10-30 00:39:43 24 4
gpt4 key购买 nike

我尝试在我的应用程序中多次使用相同的选择查询。例如我有这个选择语句:

 _db.tbl_itembundlecontents
.Select(z => new SingleItemDTO
{
amount = z.amount,
id = z.id,
position = z.position,
contentType = new BasicMaterialDTO
{
id = z.tbl_items.id,
img = z.tbl_items.tbl_material.img,
name = z.tbl_items.tbl_material.name,
namekey = z.tbl_items.tbl_material.namekey,
info = z.tbl_items.tbl_material.info,
weight = z.tbl_items.tbl_material.weight
}
});

但我也有这个:

 _db.tbl_itembundle
.Where(x => x.type == 2)
.Select(y => new ItemBundleDTO
{
name = y.name,
namekey = y.namekey.
contents = y.tbl_itembundlecontents
.Select(z => new SingleItemDTO
{
amount = z.amount,
id = z.id,
position = z.position,
contentType = new BasicMaterialDTO
{
id = z.tbl_items.id,
img = z.tbl_items.tbl_material.img,
name = z.tbl_items.tbl_material.name,
namekey = z.tbl_items.tbl_material.namekey,
info = z.tbl_items.tbl_material.info,
weight = z.tbl_items.tbl_material.weight
}
})
});

如您所见,我在两个 linq select 语句中使用了完全相同的代码(对于 SingleItemDTO)。有没有办法分离我的第一个 select 语句的代码(没有得到 NotSupportedException)并再次重用它?我的第二个查询应如下所示:

_db.tbl_itembundle
.Where(x => x.type == 2)
.Select(y => new ItemBundleDTO
{
name = y.name,
namekey = y.namekey.
contents = y.tbl_itembundlecontents.ToDTO()
});

最佳答案

这是可能的,但方式有点不寻常。

创建一个辅助方法并像这样移动第一个查询的选择器部分

static Expression<Func<[tbl_itembundlecontents entity type], SingleItemDTO>> ToSingleItemDTO()
{
return z => new SingleItemDTO
{
amount = z.amount,
id = z.id,
position = z.position,
contentType = new BasicMaterialDTO
{
id = z.tbl_items.id,
img = z.tbl_items.tbl_material.img,
name = z.tbl_items.tbl_material.name,
namekey = z.tbl_items.tbl_material.namekey,
info = z.tbl_items.tbl_material.info,
weight = z.tbl_items.tbl_material.weight
}
};
}

现在第一个查询可以这样

_db.tbl_itembundlecontents.Select(ToSingleItemDTO());

第二个像这样

_db.tbl_itembundle
.Where(x => x.type == 2)
.Select(y => new ItemBundleDTO
{
name = y.name,
namekey = y.namekey.
contents = y.tbl_itembundlecontents.AsQueryable().Select(ToSingleItemDTO())
});

请注意导航属性后的 AsQueryable(),这是使其正常工作的基本部分。

关于c# - Linq-To-Entities 使用方法选择新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33607575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com