我的数据库中有一张表。该表称为Order。 在此表中,我有一些字段,如DOCNUMBR,VENDORID,DOCDATE等。
我在我的C#应用程序中获取DataTable dt中的所有记录。现在我想过滤三类记录。 1.按文件编号。从DOCNUMBR = 1000到5000 2.按供应商ID。从VENDORID = ACETRAVE0001到DOLECKIC0001 3.按文件日期。出自DOCDATE = 31/04/2014至2014年1月1日
我有以下SQL查询。
从订单中选择*,其中VENDORID ='ACETRAVE0001'或VENDORID如'a%'或VENDORID ='DOLECKIC0001'或VENDORID如'D%'
从订单中选择*,其中DOCNUMBR> ='1000'且DOCNUMBR< ='5000'
从订单中选择*,其中DOCDATE> ='2013-09-26'和DOCDATE< ='2014-09-26'
我想在我的C#应用程序中使用DataTable上的LINQ进行此过滤。 我已经提出以下代码,但我不满意。
private DataTable filterByRang(string _from, string _to, string flag,DataTable dt)
{
try
{
if (flag == "isDocument")
{
var Value = dt.AsEnumerable().Where(z => z.Field<string>("DOCNUMBR").StartsWith(_from ) ||z.Field<string>("DOCNUMBR").Contains(_from )||
z.Field<string>("DOCNUMBR").StartsWith(_to) || z.Field<string>("DOCNUMBR").Contains(_to));
dt = Value.CopyToDataTable();
}
else if (flag == "isDocDate")
{
var filter = dt.AsEnumerable().Where(x => x.Field<string>("DOCDATE").Substring(0, 9) == _from || x.Field<string>("DOCDATE").Substring(0, 9) == _to);
dt = filter.CopyToDataTable();
}
else if (flag == "isVendor")
{
var Value = from row in dt.AsEnumerable()
where row.Field<string>("VENDORID").ToLower().Contains(_from.ToLower()) || row.Field<string>("VENDORID").ToLower().Contains(_to.ToLower())
orderby row.Field<string>("VENDORID")
select row;
dt = Value.CopyToDataTable();
}
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
return dt;
}
提前谢谢!
答案 0 :(得分:0)
您可以使用Dataview代替Linq。但是没有得到你不满的意思。 请参阅下面的过滤链接, http://social.msdn.microsoft.com/Forums/en-US/cc3b0486-1031-4113-afb6-29dfa6e0319b/how-to-filter-a-datatable-dynamically-using-linq?forum=linqprojectgeneral