2

私が一緒に働いてきた過去数週間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();
            }





        }
4

2 に答える 2

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();
}
于 2012-11-11T03:59:36.500 に答える
1

また、通常のクエリ方法で最初またはデフォルトでアプローチすることもできます

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();
            }
于 2012-11-11T04:02:14.380 に答える