gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:05:05 26 4
gpt4 key购买 nike

我正在尝试构建一个函数,以根据某些参数动态生成不同的查询。我对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com