C# 使用动态查询库过滤列表?
我正在使用一个通用函数来过滤记录列表 功能如下:C# 使用动态查询库过滤列表?,c#,dynamicquery,C#,Dynamicquery,我正在使用一个通用函数来过滤记录列表 功能如下: class FilterRecords { public static object ParseExpression(string Condition, string FilterColumn) { string _operator = ""; string _condition = ""; if (Condition.Subst
class FilterRecords
{
public static object ParseExpression(string Condition, string FilterColumn)
{
string _operator = "";
string _condition = "";
if (Condition.Substring(0, 1) == "<" || Condition.Substring(0, 1) == ">")
{
_operator = Condition.Substring(0, 1);
if (Condition.Substring(1, 1) == "=")
{
_operator += "=";
_condition = Condition.Substring(2);
}
else
{
_condition = Condition.Substring(1);
}
_operator = "=";
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " " + _operator + " " + " @0", _condition).ToList());
}
else
{
if (Condition.Contains(','))
{
string[] conds = Condition.Split(',');
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " >= @0 && " + FilterColumn + " <= @1", conds).ToList());
}
else
{
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " == @0", Condition).ToList());
}
}
}
}
类过滤器记录
{
公共静态对象解析表达式(字符串条件、字符串筛选器列)
{
字符串_运算符=”;
字符串_condition=“”;
if(条件子字符串(0,1)==“”)
{
_运算符=条件子字符串(0,1);
if(条件子字符串(1,1)=“=”)
{
_运算符+=“=”;
_条件=条件子串(2);
}
其他的
{
_条件=条件子串(1);
}
_运算符=“=”;
return(dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn++++u运算符+++@0,_条件).ToList());
}
其他的
{
if(条件.包含(','))
{
字符串[]conds=Condition.Split(',');
return(dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn+“>=@0&&“+FilterColumn+”是否使用实体框架?如果是,那么您可以对泛型执行类似操作吗
public static IList<T> ParseExpression<T>(string Condition, string FilterColumn) where T:class
{
var query = dbContext
.CreateObjectSet<T>()
.AsQueryable();
//add filters etc.
return query.ToList();
}
公共静态IList ParseExpression(字符串条件,字符串筛选器列),其中T:class
{
var query=dbContext
.CreateObjectSet()
.AsQueryable();
//添加过滤器等。
返回query.ToList();
}
然后必须将所需的实体类型作为类型参数传递给方法,如下所示:
FilterRecords.ParseExpression<OrdsRlsd>(condition, filterColumn);
FilterRecords.ParseExpression(条件,filterColumn);
您是否使用实体框架?如果是,那么您是否可以对泛型执行类似操作
public static IList<T> ParseExpression<T>(string Condition, string FilterColumn) where T:class
{
var query = dbContext
.CreateObjectSet<T>()
.AsQueryable();
//add filters etc.
return query.ToList();
}
公共静态IList ParseExpression(字符串条件,字符串筛选器列),其中T:class
{
var query=dbContext
.CreateObjectSet()
.AsQueryable();
//添加过滤器等。
返回query.ToList();
}
然后必须将所需的实体类型作为类型参数传递给方法,如下所示:
FilterRecords.ParseExpression<OrdsRlsd>(condition, filterColumn);
FilterRecords.ParseExpression(条件,filterColumn);
试试这个主题也许你会有一些想法。这个问题是我问的:)试试这个主题也许你会有一些想法。这个问题是我问的:)嗨,汤姆,回答得很好。我没有得到它的最后一部分“然后你必须将所需的实体类型作为类型参数传递给你的方法。"。我感谢你的帮助。谢谢你,汤姆,我有一个可观察的集合,我必须对它执行筛选。我们能把这个可观察的集合传递给这个函数并用筛选的记录取回新的可观察的集合吗?我已经更新了我的答案。我不确定你的第二个评论是如何应用的,因为我以为数据来了g来自EF/a数据库?事实上,它来自EF,但我希望对datagrid绑定到的observablecollection应用多重筛选。在这种方法中这是可能的。感谢Tom,我不确定我是否理解。你能传入一个包含条件和filterColumn的新类型的集合/列表吗?然后你可以循环并链接.Where()
子句关于likequery=query.Where(“a>b”)
。嗨,汤姆,回答得不错。我没有得到它的最后一部分“然后你必须将所需的实体类型作为类型参数传递给你的方法。”。我感谢你的帮助。谢谢你,汤姆,我有一个可观察的集合,我必须对它执行筛选。我们能把这个可观察的集合传递给这个函数并用筛选的记录取回新的可观察的集合吗?我已经更新了我的答案。我不确定你的第二个评论是如何应用的,因为我以为数据来了g来自EF/a数据库?事实上,它来自EF,但我希望对datagrid绑定到的observablecollection应用多重筛选。在这种方法中这是可能的。感谢Tom,我不确定我是否理解。你能传入一个包含条件和filterColumn的新类型的集合/列表吗?然后你可以循环并链接.Where()
子句,例如query=query.Where(“a>b”)
。