过去几周我一直在与LinqToSql
合作,我喜欢它,而且这里的社区非常棒。
我创建了一个查询以在数据库中查找对象并更新值,它似乎工作正常,但代码对我来说并不自然,我想有更好的解决方案。
请查看以下代码;
//Return a list of MyObject items
// irrelevant line, just to show what the objects are
List<MyObject> items = Factory.GetObjects();
foreach (var item in items)
{
var myObjects= from myobj in db.MyOjects
where myobj.id == item.Key
select myobj;
//Should ONLY find 1 object
//Below is the code I think we could optimize
if (myObjects.Count() == 1)
{
myObjects.First().propertyToChange1 = item.p1;
myObjects.First().propertyToChange2 = item.p2;
myObjects.First().dateAltered = DateTime.Now;
//Update DB
db.SubmitChanges();
}
}
答案 0 :(得分:2)
更好的解决方案是使用SingleOrDefault
,如下所示:
var myObject = db.MyOjects.SingleOrDefault(myobj => myobj.id == item.Key);
if (myObject != null) {
myObject.propertyToChange1 = item.p1;
myObject.propertyToChange2 = item.p2;
myObject.dateAltered = DateTime.Now;
//Update DB
db.SubmitChanges();
}
答案 1 :(得分:1)
您也可以使用常规查询方式使用first或default处理
var myObjects= (from myobj in db.MyOjects
where myobj.id == item.Key
select myobj).FirstOrDefault();
if (myObjects != null)
{
myObjects.First().propertyToChange1 = item.p1;
myObjects.First().propertyToChange2 = item.p2;
myObjects.First().dateAltered = DateTime.Now;
//Update DB
db.SubmitChanges();
}