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

时间:2014-07-11 13:12:43

标签: c# sql linq linq-to-sql datatable

我的数据库中有一张表。该表称为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查询。

  1. 从订单中选择*,其中VENDORID ='ACETRAVE0001'或VENDORID如'a%'或VENDORID ='DOLECKIC0001'或VENDORID如'D%'

  2. 从订单中选择*,其中DOCNUMBR> ='1000'且DOCNUMBR< ='5000'

  3. 从订单中选择*,其中DOCDATE> ='2013-09-26'和DOCDATE< ='2014-09-26'

  4. 我想在我的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;
        }
    

    提前谢谢!

1 个答案:

答案 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