如何使用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查询。

  1. select * from Order where VENDORID='ACETRAVE0001'或VENDORID like 'a%'或VENDORID='DOLECKIC0001'或VENDORID like 'D%'

  2. select * from Order where DOCNUMBR>='1000' and DOCNUMBR<='5000'

  3. 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;
    }

提前感谢!

如何使用linq查询过滤数据表列值

您可以使用Dataview代替Linq。但我没明白你的不满。请看下面的过滤链接,http://social.msdn.microsoft.com/forums/en us/cc3b0486 - 1031 - 4113 - afb6 29 - dfa6e0319b/how -过滤- - datatable动态使用linq?forum=linqprojectgeneral