C# 从列表中更新数据集适配器Linqy方式
利用Linq尝试在提供的基于数据集的方法上生成更整洁的更新代码: 我正在尝试的代码是:C# 从列表中更新数据集适配器Linqy方式,c#,linq,dataset,dataadapter,C#,Linq,Dataset,Dataadapter,利用Linq尝试在提供的基于数据集的方法上生成更整洁的更新代码: 我正在尝试的代码是: ListProducts.ForEach( product => { DsProducts.TblProductsRow row = Ds1Products.TblProducts.First( p => p.Name == product.Name);
ListProducts.ForEach( product =>
{
DsProducts.TblProductsRow row = Ds1Products.TblProducts.First( p => p.Name == product.Name);
row.Price = Product.Price ;
});
Adapter.Update(Ds1Products, "TblProducts");
不确定我是否需要这里的参数,我还没有定义任何参数。
原因是想使用它的“键入的”功能。
数据适配器已初始化并填充
注意事项:
“序列不包含匹配元素”
(尽量保持整洁和整洁)
您得到的错误可能是因为以下行:
DsProducts.TblProductsRow row =
Ds1Products.TblProducts.First( p => p.Name == product.Name);
如果特定产品名称不存在,它将抛出“序列不包含匹配元素”异常。您可以使用
FirstOrDefault()
获取第一个(如果有的话)或null。您得到的错误可能是因为这一行:
DsProducts.TblProductsRow row =
Ds1Products.TblProducts.First( p => p.Name == product.Name);
如果特定产品名称不存在,它将抛出“序列不包含匹配元素”异常。您可以使用
FirstOrDefault()
获取第一个(如果有的话)或null。这正是您所需要的:
var productRows = from p in ListProducts
join row in Ds1Products.Tables["TblProducts"].AsEnumerable()
on p.Name equals row.Field<String>("Name")
select new { NewPrice = p.Price, Row = row };
foreach(var productInfo in productRows)
{
productInfo.Row.SetField<Double>("Price", productInfo.NewPrice);
}
顺便说一下,不是Linq,它已经存在于.NET 2.0中,因此早于Linq。这正是您所需要的:
var productRows = from p in ListProducts
join row in Ds1Products.Tables["TblProducts"].AsEnumerable()
on p.Name equals row.Field<String>("Name")
select new { NewPrice = p.Price, Row = row };
foreach(var productInfo in productRows)
{
productInfo.Row.SetField<Double>("Price", productInfo.NewPrice);
}
顺便说一句,不是Linq,它已经存在于.NET2.0中,因此早于Linq。Linq不是所有问题的答案。如果你所拥有的有用,为什么要改变呢?如果你在没有Linq的情况下得到了这个问题的答案,请提供它,对我来说,这可能是我的偏好,也基于我目前的培训阶段,我认为这在这里是可能的。Linq不是所有问题的答案。如果你有什么工作,为什么要改变它?如果你没有Linq的答案,请提供它,对我来说,这可能是我的偏好,也基于我目前的培训阶段,我认为这是可能的。我如何观察这一点,因为我确信列表中的所有内容也都在数据库中。还有什么是正确的吗?我怎么能观察到这一点,因为我确信列表中的所有内容也都在数据库中。还有什么应该是正确的吗?嗨,蒂姆,关于问题的林克方面,我说我同意你的观点,我想变得更林克。为什么是划船场?我不能使用StronglyTyped数据集的任何优点吗?@Sypress:您可以使用类型化数据集,但我很难在示例代码中使用它们,因此我提供了一个适用于类型化和非类型化数据集的解决方案。真的谢谢,这些对我来说很有价值。我正在让他们工作。请给我几分钟,好吗back@Sypress:只是编辑了答案,因为你想改变价格,而不是名字:)嗨,蒂姆,关于林克问题的另一面我说我同意你的观点,想改变,变得更林克。为什么是划船场?我不能使用StronglyTyped数据集的任何优点吗?@Sypress:您可以使用类型化数据集,但我很难在示例代码中使用它们,因此我提供了一个适用于类型化和非类型化数据集的解决方案。真的谢谢,这些对我来说很有价值。我正在让他们工作。请给我几分钟,好吗back@Sypress:仅编辑了答案,因为您想更改价格,而不是名称:)