2011-02-09 36 views
0

當我使用ADO.NET時,我用來創建使用連接查詢填充的TableAdapter,因此例如即使基礎選擇查詢將產品加入到位置表中,產品表適配器也會有'位置'列。LINQ查詢和Dao層應該如何向查看返回查詢?

在LINQ中,我該如何做到這一點?通過在ProductsDao類中編寫LINQ查詢來返回連接查詢中的列嗎?我返回什麼類型的綁定到gridview?重新調整LINQ結果的問題是我會認爲它會打破ProductsDao類的一致性(這應該只從數據庫返回產品行)。

回答

2

我認爲最好的選擇是定義代表想要返回的加入數據的類(例如ProductDetails),然後從數據層返回IQueryable<ProductDetails>

要返回可查詢,你可以寫只是一個簡單的LINQ查詢:

public IQueryable<ProductDetails> GetProducts() { 
    return from p in db.Products 
     join d in db.Details on p.ID equals d.ID 
     select new ProductDetails { p.Name, d.Notes }; 
} 

這種方法有幾個好處:

  • 你不直接公開YourDataContext對象 - 它可以留作爲DAO類的私有字段(如果它是短暫的),或者您可以根據需要創建它。

  • 你不能直接暴露下面的LINQ實體(例如ProductDetails),使用戶可以與您的數據庫不小心惹(除非你給他們一個辦法做到這一點)

  • 你返回可查詢,它只是代表查詢。當用戶添加其他約束時(例如where),查詢將被組合,您將不會加載不必要的數據。

  • 您可以從類只露出合理功能 - 例如,如果你只有方法GetProducts服用categoryID,用戶只能獲取產品中的特定類別(這使得它不可能從獲取整個表數據庫)

+0

非常感謝您的建議。那麼,在我的ProductDao類中使用這種方法還是應該是不同類的方法? – jaffa