Linq To SQL - 高效处理对象 - 检索第一个/单个对象

时间:2012-11-11 03:54:51

标签: c# database linq linq-to-sql

过去几周我一直在与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();
            }





        }

2 个答案:

答案 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();
            }