相关疑难解决方法(0)

动态创建LINQ到实体OrderBy表达式

我正在尝试动态添加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)

希望有人能对此有所了解!

c# linq-to-entities

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

为LINQ/Lambda创建一个OrderBy表达式

我正在创建一个概念证明,它将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)

c# linq lambda

15
推荐指数
2
解决办法
3万
查看次数

实体框架 C# 中的反射

我正在尝试使用反射通过实体框架进行动态选择。

这个想法是,该方法将获取列名称、要搜索的每列的值以及每列的顺序作为参数。

例如:

 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)

是否可以?你可以帮帮我吗?

c# reflection entity entity-framework

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

使用反射从属性Name获取lambda表达式

我想让用户选择不同属性的搜索.例如

[输入文本] | [选择选项{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,也许使用反射?

谢谢

c# reflection lambda entity-framework-4

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