.net 数据关系集合(数据集.关系)上的LINQ

sirbozc5  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(105)

在开发将XML导入SQL Server的应用程序时,XML的结构如下所示:How to get multiple tables in Dataset from XML
我可以使用上面的代码将XML加载到DataSet中并获得正确的表:

var ds = new DataSet();
var employees = new DataTable("Employees");
var cars = new DataTable("Cars");
//and others

using Stream stream = new FileStream("data.xml", FileMode.Open, FileAccess.Read);
ds.ReadXml(stream);

foreach (DataRelation dataRelation in ds.Relations)
{
    switch (dataRelation.ParentTable.TableName)
    {
        case "Employees":
            employees = dataRelation.ChildTable;
            break;
        case "Cars":
            cars = dataRelation.ChildTable;
            break;
        //and others
    }
}

但是当我尝试用LINQ做类似的事情时

var dt1 = ds.Relations.Where(x => x.RelationName == "Employees").FirstOrDefault();

我得到这个错误:
错误CS1061“DataRelationCollection”不包含“Where”的定义,并且找不到接受“DataRelationCollection”类型的第一个参数的可访问扩展方法“Where”(是否缺少using指令或程序集引用?)
是否有更好的方法从数据集获取特定的数据表(通过使用DataRelation)?

vyu0f0g1

vyu0f0g11#

DataRelationCollection仅实现ICollection的非泛型版本(继承自InternalDataCollectionBase),这在支持的LINQ方法方面非常有限,您可以通过OfType调用“启用”泛型方法:

var dt1 = dataRelationCollection.OfType<DataRelation>()
    .FirstOrDefault(x => x.RelationName == "Employees");

相关问题