c# - 在 Entity Framework 中创建动态 linq 排序和搜索顺序语句时

标签 c# asp.net linq entity-framework

我正在尝试构建一个函数,以根据某些参数动态生成不同的查询。我对 LINQ 语法有点困惑,我不确定我是否做对了。

字符串类型参数集是“search”(用于搜索文本框值)、“searchfield”(搜索内容)、“limit_begin”、“limit_end”(用于多少行和从何处开始)。 "order_by"用于排序的字段。 "order_sort"排序方式。

我之前在 stackoverflow 上发现了这个 'getpropertyvalue' 反射函数,我希望它能根据我自己的解释实现我的意图。

 private static object GetPropertyValue(object obj, string property)
    {
        System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
        return propertyInfo.GetValue(obj, null);
    }

if (order_sort == "ASC")
        {
            (from a in entities.UserTable
             where GetPropertyValue(a, searchfield).ToString().Contains(search)
             select a)
                .OrderBy("a." + order_by)
                .Skip(Convert.ToInt32(limit_begin))
                .Take(Convert.ToInt32(limit_end))
                .ToList();
        }
        else if (order_sort == "DESC")
        {
            (from a in entities.UserTable
             where GetPropertyValue(a, searchfield).ToString().Contains(search)
             select a)
                .OrderByDescending("a." + order_by)
                .Skip(Convert.ToInt32(limit_begin))
                .Take(Convert.ToInt32(limit_end))
                .ToList();
        }

我在“Orderby”行遇到错误,VS2008 以红色突出显示它,表示无法从用法中推断出参数类型。

最佳答案

.OrderBy.OrderByDescending方法需要类型为 Func<T, TKey> 的参数你正在传递一个字符串。基本上,它要求您提供一个表达式,它可以用来标识您要作为排序依据的属性。由于您必须从一个字符串开始,所以我最好的想法是在您的 OrderBy 中使用反射。

.OrderBy(x => x.GetType().GetProperty(order_by).GetValue(x, null).ToString())

如您所见,这不是很容易阅读,但应该可以解决问题。您还可以查看 LINQ 动态查询库:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx .

希望对您有所帮助! :)

关于c# - 在 Entity Framework 中创建动态 linq 排序和搜索顺序语句时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992717/

相关文章:

asp.net - ASP.NET Web 应用程序在长时间未使用后是否会变为 "quiescent"?

c# - LINQ 运算符和 LINQ 关键字之间的区别

c# - 如何在 LINQ 中动态添加或删除 where 子句

asp.net - 在 asp.net gridview 中应用 Bootstrap 分页样式的简单脚本

jquery - 更改asp :label with jQuery then access in codebehind

c# - IQueryable 不包含 'Select' 的定义

c# - 重载是向同一函数添加不同参数的唯一方法吗?

c# - 在 C# 整数运算中,a/b/c 是否总是等于 a/(b*c)?

c# - HLSL:返回一个 float4 数组?

c# - 从构建事件中调用方法