用于查询数据集列表的 Linq 查询

Linq Query for querying a list of DataSet

我有一个数据集列表。

例如:

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

对于我的任务,列表中DataSet 的数量和每个DataSet 中DataTable 的数量将在运行 时已知。 现在我想从名称中包含特定字符串的数据集中获取那些表,例如说 'Group1'.

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

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

但我得到的错误是 'An expression of type System.Data.DataSet is not allowed in a subsequent from clause in a query expression with source typeList'。

请帮我看看正确的方法。

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

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

    }

这将获取包含名称的表:

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

您原来的查询已关闭。它只需要充实一点。首先,它有助于在 from 语句中声明类型。还指定您想要集合中的 table 集合。 where 子句只需要检查 table 的 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;