相关疑难解决方法(0)

返回IEnumerable <T>与IQueryable <T>

返回IQueryable<T>IEnumerable<T>?有什么区别?

IQueryable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;

IEnumerable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
Run Code Online (Sandbox Code Playgroud)

两者都会延迟执行,何时应该优先于另一个?

c# linq ienumerable iqueryable linq-to-sql

1051
推荐指数
13
解决办法
22万
查看次数

基于子实体的属性构建OrderBy Lambda表达式

我正在尝试OrderBy使用lambda表达式生成LINQ 子句,其中实体的列名称作为字符串的输入(在下面的"sortOn"变量中).

下面的代码适用于sortOn值,例如生成lambda的"Code"

p => p.Code
Run Code Online (Sandbox Code Playgroud)

但我还想对lambda可能存在的子实体进行排序

p => p.Category.Description
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我只想设置sortOn ="Category.Description"并生成正确的lamdba表达式.

这可能吗?有关最佳方法的任何建议都会受到欢迎.

此代码适用于简单的情况:

var param = Expression.Parameter(typeof (Product), "p");

var sortExpression = Expression.Lambda<Func<Product, object>>(
    Expression.Property(param, sortOn), param);

if (sortAscending ?? true)
{
   products = products.OrderBy(sortExpression);
}
else
{
   products = products.OrderByDescending(sortExpression);
}
Run Code Online (Sandbox Code Playgroud)

此问题的用例是显示数据网格并能够对数据进行排序,只需将要排序的列名称传递回服务器即可.我想使解决方案通用,但现在已开始使用特定类型(示例中的产品).

c# linq lambda expression-trees

11
推荐指数
1
解决办法
1万
查看次数