Linq查询查询DataSet列表

时间:2015-04-23 19:21:41

标签: c# linq list dataset

我有一个DataSet列表。

例如:

List<DataSet> list = new List<DataSet>();

对于我的任务,列表中的DataSet数量和每个DataSet中的DataTable数量在运行时是已知的。 现在我想从DataSets中获取那些在其名称中包含特定字符串的表,例如说&#39; Group1&#39;。

我正在尝试使用以下代码:

var ds= from set in list from table in set  
        where li.Where(e=>e.Tables.Contains("Group")) select table;

但我收到的错误是&#39;在源类型为&#39;的查询表达式的后续from子句中不允许使用System.Data.DataSet类型的表达式。

请帮我正确的方法。

3 个答案:

答案 0 :(得分:1)

我尝试通过创建另一个类来复制您的数据结构。希望这可以帮助。

  namespace TestCode
    {
        class Program
        {
            static void Main(string[] args)
            {
                var list = new List<TC> {new TC(2), new TC(2), new TC(3), new TC(4), new TC(5), new TC(2)};

                var dt = list.Where( // Contains 3 elements
                    x => x.X == 2
                    );

                //var ds = from set in list
                //         from table in set
                //         where li.Where(e => e.Tables.Contains("Group"))
                //         select table;
            }
        }

        internal class TC
        {
            public int X { get; set; }
            internal TC(int val)
            {
                X = val; 
            }
        }

    }

答案 1 :(得分:0)

这将获取包含名称的表:

 var tables = list.SelectMany(x => x.Tables.Cast<DataTable>())
     .Where(x => x.TableName.Contains("Group"));

答案 2 :(得分:0)

您的原始查询已关闭。它只需要充实一点。首先,它有助于在from语句中声明类型。同时指定您想要集合中的表集合。 where子句应该只需要检查表的TableName属性:

List<DataSet> list = new List<DataSet>();
var ds = from DataSet set in list
         from DataTable table in set.Tables
         where table.TableName.Contains("Group")
         select table;