我使用System.Linq.Dynamic.Core v 1.2.24在通过实体框架查询SQL Server时创建一个动态选择语句。它位于GraphQL API后面,目的是使数据库查询尽可能高效——只查询数据库中请求的列。我有投影工作的类型被枚举,但该类型有一个子属性,也需要投影。
我创建了一个简单的Fiddle来演示这一点。
https://dotnetfiddle.net/nvU7DB
在这个例子中,我正在查询一个Person集合,Person有一个属性Address。我成功地投影了Person属性,但不知道如何投影Address属性。我没能找到任何这样的例子。
这个动态linq字符串将返回地址的所有属性:new Person(Id, FirstName,Address))";但是我想在地址上做一个投影,比如填充Id和City。
我在想字符串可能是这样的new Person(Id, FirstName,) new Address(Id, City)";但这会导致"未处理异常"。"地址"类型未找到(索引37)">
不带new:new Person(Id, FirstName,) Address(Id, City))";这将导致"未处理异常"。类型"Person"中不存在属性或字段"City"(索引为38)"
为了澄清我要做的事情,这是c#代码中的投影:
var projectedPeople = people.Select(
e => new Person() {
Id = e.Id,
FirstName = e.FirstName,
Address = new Address(){
Id = e.Address.Id,
City = e.Address.City
}
});
任何帮助或见解将不胜感激。
对于任何稍后选择此选项的人,解决方案如下
string dynamicSelect = "new Person(Id, FirstName, new Address(it.Address.Id, it.Address.AddressLine1, it.Address.City) as Address)";
ParsingConfig parsingConfig = new ParsingConfig(){ResolveTypesBySimpleName = true};
IEnumerable result = (IEnumerable)peopleQueryable.Select(parsingConfig, dynamicSelect);