如何使用linq查询过滤数据表列值
本文关键字:数据表 过滤 查询 何使用 linq | 更新日期: 2023-09-27 18:12:25
我的数据库中有一个表。这张表叫做Order。在这个表中,我有一些字段,如DOCNUMBR,VENDORID,DOCDATE等。
我在c#应用程序中获取了DataTable dt中的所有记录。现在我想过滤三类记录。1. 按文件编号。从DOCNUMBR=1000到50002. 按厂商ID。从VENDORID=ACETRAVE0001导出到DOLECKIC00013.按文件日期。从DOCDATE=31/04/2014到1/04/2014
我有以下SQL查询。
-
select * from Order where VENDORID='ACETRAVE0001'或VENDORID like 'a%'或VENDORID='DOLECKIC0001'或VENDORID like 'D%'
-
select * from Order where DOCNUMBR>='1000' and DOCNUMBR<='5000'
-
select * from Order where DOCDATE>='2013-09-26' and DOCDATE<='2014-09-26'
我想在我的c#应用程序中使用LINQ对DataTable进行过滤。我把下面的代码,但我不满意。
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;
}
提前感谢!
您可以使用Dataview代替Linq。但我没明白你的不满。请看下面的过滤链接,http://social.msdn.microsoft.com/forums/en us/cc3b0486 - 1031 - 4113 - afb6 29 - dfa6e0319b/how -过滤- - datatable动态使用linq?forum=linqprojectgeneral