我正在尝试动态添加orderby表达式.但是当执行下面的查询时,我得到以下异常:
System.NotSupportedException:无法创建类型为"Closure type"的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').
奇怪的是,我只查询那些原始类型.
string sortBy = HttpContext.Current.Request.QueryString["sidx"];
ParameterExpression prm = Expression.Parameter(typeof(buskerPosting), "posting");
Expression orderByProperty = Expression.Property(prm, sortBy);
// get the paged records
IQueryable<PostingListItemDto> query =
(from posting in be.buskerPosting
where posting.buskerAccount.cmsMember.nodeId == m.Id
orderby orderByProperty
//orderby posting.Created
select new PostingListItemDto { Set = posting }).Skip<PostingListItemDto>((page - 1) * pageSize).Take<PostingListItemDto>(pageSize);
Run Code Online (Sandbox Code Playgroud)
希望有人能对此有所了解!
我正在创建一个概念证明,它将Lambda/LINQ用于动态where和orderby.以下代码适用于where表达式,但我无法弄清楚如何通过表达式创建订单.对于这个例子,如果可能的话我想保持简单; 我宁愿不编写修改表达式树的代码.
void Main()
{
DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
List<Products> products = GetProducts(filter, Products);
Console.WriteLine(products);
}
private static List<Products> GetProducts(Expression<Func<Products, bool>> filter, Table<Products> Products)
{
var products = Products.Where(filter);
return products.ToList();
}
Run Code Online (Sandbox Code Playgroud)
我想要的是类似于以下内容,但无法弄清楚通过表达式创建顺序的代码.
void Main()
{
DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
Expression<Func<Products, ????>> orderBy = d => ??????;
List<Products> products = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用反射通过实体框架进行动态选择。
这个想法是,该方法将获取列名称、要搜索的每列的值以及每列的顺序作为参数。
例如:
public anEntity list(String ColumnName, String Value, String Order)
{
//
//...
items = (from r in context.Products
where r.GetType().GetProperty(ColumnName). Contains(Value)))
select r).OrderBy(Order).ToList();
returns Items
}
Run Code Online (Sandbox Code Playgroud)
是否可以?你可以帮帮我吗?
我想让用户选择不同属性的搜索.例如
[输入文本] | [选择选项{ID,NAME,PHONE}] | [搜索]
然后我会像这样构建我的查询:
repository.Where(lambda-expression)
Run Code Online (Sandbox Code Playgroud)
从所选选项{ID,NAME,PHONE}构建lambda表达式(例如:x => x.NAME.Equals(INPUT TEXT))
有没有办法从Property属性名称构建lambda,也许使用反射?
谢谢