2012-11-11 39 views
2

最近幾周我一直在使用LinqToSql,我喜歡它,這裏的社區很棒。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

一個更好的解決方案是使用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(); 
} 
+0

好:),這就是太棒了,什麼是(=>) – IEnumerable

+0

@IEnumerable這是一個[lambda表達式](http://msdn.microsoft.com/en-us/library/bb397687.aspx) - 一個沒有名字的函數。 – dasblinkenlight

+0

太棒了,我喜歡它謝謝 – IEnumerable

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(); 
      } 
+0

但是沒有First()在這種情況下...... – Pleun

相關問題