返回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)
两者都会延迟执行,何时应该优先于另一个?
我正在尝试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)
此问题的用例是显示数据网格并能够对数据进行排序,只需将要排序的列名称传递回服务器即可.我想使解决方案通用,但现在已开始使用特定类型(示例中的产品).