在更新方法中使用LINQ - where子句的问题
本文关键字:where 子句 问题 LINQ 更新 新方法 | 更新日期: 2023-09-27 18:19:09
我正在编写一个更新方法,传递要更新的对象列表,我想知道如何编写LINQ查询来从需要更新的数据库中获取所有对象
这是我的更新方法与linq查询的一个例子,我试图使(伪代码用于部分我不知道如何做)
void UpdateObjects(List<MyObjects> updatedObjects)
{
DatabaseContext myContext = new DatabaseContext();
var originalObjectsThatRequireUpdating = from o in myContext.MyObjects
where o.ID matches one of updatedObjects.ID
select o;
foreach (var originalObject in originalObjectsThatRequireUpdating )
{
IEnumerable<MyObjects> tmpItem = updatedObjects.Where(i => i.ID == originalObject.ID);
originalObject.Field1 = tmpItem.ToList()[0].Field1;
//copy rest of the fields like this
}
myContext.SubmitChanges();
}
我不知道如何用
这样的东西轻松创建linq查询 where o.ID matches one of updatedObjects.ID
如果有人知道一种更简单的方法来完成我正在做的事情,请告诉我,这似乎是一种奇怪的方法,但这是我目前能想到的唯一方法。
你可以这样做:
where updatedObjects.Any(uo => uo.ID == o.ID)
您应该寻找实现批量更新与linq,例如,它描述在http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx
您可以创建一个lambda或其他方法来执行检查;例如
where IDMatches(o.ID, updatedObjects)
,然后定义IDMatches作为updatedObjects的简单迭代。
static void IDMatches(int id, List<MyObject> updatedObjects)
{
foreach (MyObject updated in updatedObjects)
{
if (id == updated.ID)
return true;
}
return false;
}