我在动态LINQ 的VS2008示例中找到了一个示例,它允许您使用类似sql的字符串(例如,OrderBy("Name, Age DESC"))
用于排序.不幸的是,包含的方法仅适用于IQueryable<T>
;.有没有办法获得此功能IEnumerable<T>
?
目前我们有一个包从字符串中的字段动态生成linq select.它适用于平面属性,但它不适用于像someObj.NestedObj.SomeField这样的嵌套字段.
我们当前的代码在服务方法中如下所示:
_context.Shipments
.Where(s => s.Id == request.Id) // it does not matter just an example
.Select(request.Fields)
.ToPage(request); // ToPage extension comes from a nuget package
Run Code Online (Sandbox Code Playgroud)
请求对象的参数"fields"只是一个用逗号分隔的字符串,包括Shipment对象的属性.
我对Shipment进行了一些重构,我将一些字段分组为一个名为Address的新类,并将其添加到Shipment中,如下所示:
// before refactoring
class Shipment {
// other fields...
public string SenderAddress;
public string SenderCityName;
public string SenderCityId;
public string RecipientAddress;
public string CityName;
public string CityId;
}
// after refactoring
class Shipment {
// other fields...
public Address Sender;
public Address Recipient;
}
class Address {
public string AddressText;
public …
Run Code Online (Sandbox Code Playgroud)