为了账号安全,请及时绑定邮箱和手机立即绑定

为 Jquery 数据表生成动态 Linq

为 Jquery 数据表生成动态 Linq

C#
宝慕林4294392 2021-06-30 14:31:25
我正在尝试构建一个适配器,以便将JQuery Datables与 Entity Framework 一起使用变得相当简单。该适配器与 Telerik 在其Kendo UI Extensions 中构建的适配器非常相似。我已经设法使大部分逻辑正常工作,但给我带来一些麻烦的最后一块是让动态生成的 Linq 工作。我已经研究了LinqKit和Dynamic Expressions,我对如何解决这个问题感到有些困惑。我目前正在使用 Dynamic Linq 扩展,但收效甚微。它似乎可以很好地处理 Varchar 和 Int 字段,但它在处理日期时会出错。我像这样使用它:public class Search{    [DataMember(Name = "value")]    public string Value { get; set; }    [DataMember(Name = "regex")]    public string Regex { get; set; }    public string ToExpression(IList<Column> columns)    {        var list = columns.Select(column => $"{column.Data}.Contains.(@{columns.IndexOf(column)})").ToList();        return string.Join("or", list);    }}public class FilterExpression{    public string Filter { get; }    public IEnumerable<object> Values { get; }    public FilterExpression(IEnumerable<Column> columns, Search search)    {        if (search.Value == null) return;        var list = columns.Where(n => n.Searchable).ToList();        Filter = ToExpression(list);        Values = list.Select(n => search.Value);    }    private static string ToExpression(IEnumerable<Column> columns)    {        var colList = columns.Where(n => n.Searchable).ToList();        var list = colList.Select(column => $"{column.Data}.ToString().Contains(@{colList.IndexOf(column)})").ToList();        return string.Join(" or ", list);    }}public static IQueryable Where(this IQueryable source, FilterExpression filterExpression){    return filterExpression?.Values == null ? source : source.Where(filterExpression.Filter, filterExpression.Values.ToArray());}以上适用于大多数情况,但再次日期有点问题。目标是防止开发人员必须手动编写他们的 LinqWhere语句,而是允许适配器简单地生成它。同样,上述内容适用于 INT 字段和 VARCHAR,但如果我在模型中包含一个 DATE 字段,我得到的错误是: System.NotSupportedException: 'LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.'
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信