请教一个动态Linq问题。
我现在有一个DataTable如下        private static DataTable CreateDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Clear();
            dt.Columns.Add("ID");
            dt.Columns.Add("ColA");
            dt.Columns.Add("ColB");
            dt.Columns.Add("ColC");            dt.Rows.Add(new string[] { "1", "Row1ColA", "Row1ColB", "Row1ColC" });
            dt.Rows.Add(new string[] { "2", "Row2ColA", "Row2ColB", "Row2ColC" });
            dt.Rows.Add(new string[] { "3", "Row3ColA", "Row3ColB", "Row3ColC" });
            dt.Rows.Add(new string[] { "4", "Row4ColA", "Row4ColB", "Row4ColC" });
            return dt;
        }
我现在想进行动态的查询 id为1 OR 2的记录, DataTable dt = CreateDataTable();
 List<int> IDs = new List<int> { 1,2 };
 
foreach (int i in IDs)
{
     //how to?
}这是目前遇到的问题,动态查询还有其他问题,为表示诚意,待结贴后重新悬赏。

解决方案 »

  1.   

    问题,你表的创建是有问题的,始终为空,不知道你发现了没有正常创建,如下private  DataTable CreateDataTable()
                {
                    DataTable tblDatas = new DataTable("Datas");
                    tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));
                    tblDatas.Columns[0].AutoIncrement = true;
                    tblDatas.Columns[0].AutoIncrementSeed = 1;//设置列自增
                    tblDatas.Columns[0].AutoIncrementStep = 1;                tblDatas.Columns.Add("Product", Type.GetType("System.String"));
                    tblDatas.Columns.Add("Version", Type.GetType("System.String"));
                    tblDatas.Columns.Add("Description", Type.GetType("System.String"));                tblDatas.Rows.Add(new object[] { null, "a", "b", "c" });
                    tblDatas.Rows.Add(new object[] { null, "a", "b", "c" });
                    tblDatas.Rows.Add(new object[] { null, "a", "b", "c" });
                    tblDatas.Rows.Add(new object[] { null, "a", "b", "c" });
                    tblDatas.Rows.Add(new object[] { null, "a", "b", "c" });                return tblDatas;
                }然后查询的话如下 DataTable dt = CreateDataTable();
                    List<int> IDs = new List<int> { 1, 2 };
                    string condition = string.Join(",",IDs);
                    condition = "ID IN (" + condition + ")";
                    var result=dt.Select(condition);//此时result包含两行,即ID为1和2的记录
      

  2.   


               var result = from a in dt.AsEnumerable()
                             from i in IDs
                             where Convert.ToInt32(a[0]) == i
                             //var result = from i in IDs
                             select a;
                foreach (DataRow myre in result)
                {
                    Console.WriteLine("{0} {1} {2} {3}",myre[0],myre[1],myre[2],myre[3]);
                }          
         
      

  3.   

            static void Main()
            {
                List<int> IDs = new List<int> { 1, 2 };            DataTable dt = CreateDataTable();            var data = from d in dt.AsEnumerable()
                           from id in IDs
                           where d.Field<string>("ID") == id.ToString()
                           select d;
                data.ToList().ForEach(d => Console.WriteLine("ID:{0},ColA:{1},ColB:{2}", d.Field<string>("ID").ToString(), d.Field<string>("ColA").ToString(), d.Field<string>("ColB").ToString()));
            }
            private static DataTable CreateDataTable()
            {
                DataTable dt = new DataTable();
                dt.Columns.Clear();
                dt.Columns.Add("ID");
                dt.Columns.Add("ColA");
                dt.Columns.Add("ColB");
                dt.Columns.Add("ColC");            dt.Rows.Add(new string[] { "1", "Row1ColA", "Row1ColB", "Row1ColC" });
                dt.Rows.Add(new string[] { "2", "Row2ColA", "Row2ColB", "Row2ColC" });
                dt.Rows.Add(new string[] { "3", "Row3ColA", "Row3ColB", "Row3ColC" });
                dt.Rows.Add(new string[] { "4", "Row4ColA", "Row4ColB", "Row4ColC" });
                return dt;
            }
      

  4.   

    我想通过 Expression 来构造出动态条件,这里的id的or 条件是我举例不当。忘高手帮帮忙
      

  5.   

    我修改一下条件规则
    1:ID为1或2
    2:Col1字段包含“Col1”
      

  6.   


    现在CSDN越改越烂了,
    回复都看不见了,
    刷几次才出来
    1和2是必须都满足,
    还是只满足其一即可?
      

  7.   

    根据你的需求拼出查询条件即可condition = "ID IN (" + condition + ") and Col1 like '%"+"Col1"+"%'";
                    var result = dt.Select(condition);//此时result包含两行,即ID为1和2的记录
      

  8.   


            private static DataTable CreateDataTable()
            {
                DataTable dt = new DataTable();
                dt.Columns.Clear();
                dt.Columns.Add("ID",typeof(int));
                dt.Columns.Add("ColA");
                dt.Columns.Add("ColB");
                dt.Columns.Add("ColC");            dt.Rows.Add(new string[] { "1", "Row1ColA", "Row1ColB", "Row1ColC" });
                dt.Rows.Add(new string[] { "2", "Row2ColA", "Row2ColB", "Row2ColC" });
                dt.Rows.Add(new string[] { "3", "Row3ColA", "Row3ColB", "Row3ColC" });
                dt.Rows.Add(new string[] { "4", "Row4ColA", "Row4ColB", "Row4ColC" });
                return dt;
            } DataTable dt = CreateDataTable();
     List<int> IDs = new List<int> { 1,2 };
     
     var newDT=dt.Where(t=>IDs.Contains(t.Field<int>("ID"))).CopyToDataTable();
      

  9.   

    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx