我有一个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类型的表达式。
请帮我正确的方法。
答案 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;