【问题标题】:Linq Query for querying a list of DataSet用于查询 DataSet 列表的 Linq Query
【发布时间】:2015-07-02 04:11:20
【问题描述】:

我有一个数据集列表。

例如:

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

对于我的任务,列表中的 DataSet 数量和每个 DataSet 中的 DataTable 数量将在运行时知道。 现在我想从名称中包含特定字符串的 DataSet 中获取这些表,例如“Group1”。

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

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

但我收到错误消息,因为“源 typeList 的查询表达式中的后续 from 子句中不允许使用 System.Data.DataSet 类型的表达式”。

请帮助我正确的方法。

【问题讨论】:

    标签: c# linq list dataset


    【解决方案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; 
                }
            }
    
        }
    

    【讨论】:

    • 这如何回答这个问题?
    • @GertArnold 我提供了一个已知的数据结构和针对该数据结构的 lambda 表达式。他应该能够从我的答案中推断出他的答案。我的代码的好处是任何人都可以在 Visual Studio 中复制/粘贴它并立即运行它。
    【解决方案2】:

    您的原始查询已关闭。它只需要充实一点。首先,它有助于在 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;
    

    【讨论】:

      【解决方案3】:

      这将获取包含名称的表:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-11
        • 2014-07-24
        • 2014-05-07
        • 2013-06-11
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多