2011-04-10 63 views
0

我使用LINQ to SQL,我想知道是否有捷徑的語法如下:C#:獲取LINQ對象從主要

using (Model db = new Model()) 
{ 
    LinqObj l = db.LinqObj.Where(o => o.ID = id).Single(); 
} 

我知道我可以只創建一個返回靜態方法一個LinqObj對象:

public static LinqObj FromID(int id) 
{ 
    using (Model db = new Model()) 
    { 
     return LinqObj l = db.LinqObj.Where(o => o.ID = id).Single(); 
    } 
} 

這讓我想;有沒有一種方法來創建一個返回的對象的構造:

LinqObj l = new LinqObj(ID: 7); 

中有什麼的LINQ to SQL對象創建一個單行的目標的最佳方式?

回答

0

你可以有LINQ的實用方法,SQL樣板:

static T GetObject<T>(Func<Model, T> func) 
{ 
    using(var db = new Model()) return func(db); 
} 

然後只是這樣做:

var l = GetObject(db => db.LinqObj.Single(o => o.ID == id)); 
+0

鼓勵人們獲取在後臺創建DataContext的對象是否真的是一個好主意?這看起來很麻煩,因爲你以這種方式獲得的所有物體都不能真正能夠一起工作;必須從相同的DataContext獲得對象以完全互操作。 – 2011-04-10 04:23:16

+0

在公共API中使用它可能不是一個好主意,但它應該適合內部/私人使用。我不知道在OP的情況下如何使用這些對象,但對於只讀場景應該沒問題。 – 2011-04-10 04:27:41

0

我認爲最簡單的做法是創建方法來幫助創建或者像您的靜態方法示例一樣檢索您需要的數據。你可以擴展你的類,並把構造函數中的邏輯做一些檢索,但我不確定這是乾淨的方式。

0

什麼是錯的:

dataContext.LinqObjs.Single(x => x.Id = 23); 

?這是非常可讀的,它顯然正確地重新使用您現有的DataContext。爲獲得的每個對象創建一個DataContext是一種不好的做法。手動重新連接它們是一件很痛苦的事情,如果你不這樣做,你不能將一個對象添加到另一個對象的容器屬性中。