C# LinqToSQL-有效处理对象-检索第一个/单个IOObject

C# LinqToSQL-有效处理对象-检索第一个/单个IOObject,c#,database,linq,linq-to-sql,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.G

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





        }
//返回MyObject项的列表
//不相关的线,只是为了显示对象是什么
List items=Factory.GetObjects();
foreach(项目中的var项目)
{
var myObjects=来自数据库myObjects中的myobj
其中myobj.id==item.Key
选择myobj;
//应该只找到1个对象
//下面是我认为我们可以优化的代码
if(myObjects.Count()==1)
{
myObjects.First().propertyToChange1=item.p1;
myObjects.First().propertyToChange2=item.p2;
myObjects.First().dateChanged=DateTime.Now;
//更新数据库
db.SubmitChanges();
}
}

更好的解决方案是使用
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();
}

您还可以以常规查询方式使用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();
            }
很好:),太棒了,(=>)@IEnumerable是什么,它是一个没有名字的函数。