首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Entity Framework 2.0中使用Dynamic Linq Core创建包含列表的对象

在Entity Framework 2.0中使用Dynamic Linq Core创建包含列表的对象
EN

Stack Overflow用户
提问于 2018-04-14 02:47:45
回答 1查看 334关注 0票数 0

我有以下两个类:

代码语言:javascript
运行
复制
public Part {
    public string PartNumber {get; set;}
    public string Description {get; set;}
    public List<Warehouse> Warehouses {get; set;}
}

public Warehouse {
    public string PartNumber {get; set;}
    public string WarehouseName {get; set;}
    public int Quantity {get; set;}
    public int ReorderPoint {get; set;}
}

使用实体框架核心2.0,我使用一对多关系将它们关联起来。使用Dynamic Linq Core,我尝试创建一个查询,返回PartNumber、描述以及仓库列表中唯一属性为WarehouseName的特定部件的列表,理想情况下如下所示:

代码语言:javascript
运行
复制
List<string> fields = new List<string> {"PartNumber", "Description", "Warehouses.WarehouseName"};
var _dataSet = dbContext.Parts.Include(x => x.Warehouses);
var data = _dataSet.Where("PartNumber = \"Part1234\"").Select("new (" + String.Join(",", fields) + ")").ToDynamicArray();

但我收到这个错误:“类型‘List`1’中不存在属性或字段'Warehouse‘”。如果我这样做,它工作得很好:

代码语言:javascript
运行
复制
var data = _dataSet.Where("PartNumber = \"Part1234\"").Select(x => new Part
{
    PartNumber = x.PartNumber,
    Description = x.Description,
    Warehouses = x.Warehouses.Select(y => new Warehouse { Warehouse = y.Warehouse }).ToList()
}).Single();

问题是我希望它是动态的,这样用户就可以从Part和Warehouse类传入他们想要获取的字段列表,而不必修改select来为那些特定的字段构建它。

EN

Stack Overflow用户

发布于 2019-08-22 16:16:47

您需要支持Warehouses上的子查询。我将复制this answer中列出的相关步骤

  1. ParseAggregateExpression ParseAggregate(Expression instance,Type elementType,string methodName,int Expression)中添加以下内容{ // Change starts var originalIt = it;var originalOuterIt = outerIt;// Change ends here outerIt = it;ParameterExpression innerIt = Expression.Parameter(elementType,elementType.Name);it = innerIt;Expression[] args = ParseArgumentList();// Change starts it =;=;//更改在此结束... }
  2. SelectToList添加到IEnumerableSignatures中,并在ParseAggregate中分别添加条件:

接口IEnumerableSignatures { ...空选择(对象选择器);空ToList();... }表达式ParseAggregate(表达式实例,类型elementType,字符串methodName,整型errorPos) { ...如果(signature.Name == "Min“|| signature.Name == "Max”|| signature.Name == "Select") ... }

  • Finally,您的查询将是:

static void Main() { //示例数据var Warehouse =新列表{新仓库{ WarehouseName = "NY1",数量= 10 },新仓库{ WarehouseName = "NY2",数量= 100 } };var parts =新列表{ PartNumber = "1",Description = "Hammer",Warehouse =Warehouse} };//查询var结果=部件.Select(@“PartNumber (Warehouses.Select,Description,Warehouses.Select(WarehouseName).ToList() as WarehouseNames )");}

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49823411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档