2009-01-20 71 views
1

我有兩個表1)產品2)分類LINQ to SQL和從連接表

僅檢索特定行

產品表有一個稱爲「類別ID」字段和類別表已稱爲字段「類別名稱」,ID ,DateCreated和其他一些。

我想使用LINQ to SQL查詢所有產品行以及JUST Category.CategoryName。此查詢將用於數據源並綁定到ListView。

我知道我可以使用LoadWith選項與DataContext和一個連接。但問題是,我最終與所有來自產品和類別的行。我真正想要的是從產品的所有行和只是的Category.CategoryName

完美的解決辦法是,如果LoadWith選項將讓您指定的域返回,但作爲answered here,這是不可能的。

我確實發現單程要做到這一點,創建一個自定義類,它具有我想要返回的相同的確切字段。因此,例如

public class ProductInfo 
{ 
    public string ProdName { get; set; } 
    public int ProdID { get; set; } 
    public int CategoryID { get; set; } 
    public string CategoryName { get; set; } 
} 

但問題是,選擇語句結束真的很長。例如...

var products = from p in db.Products 
       join c in db.Categories on p.CategoryID = c.ID 
       select new ProductInfo { ProdName = p.ProdName, ProdID = p.ID, 
CategoryID = p.CategoryID, CategoryName = c.CategoryName } 

這變得非常容易出錯。

所以我的問題 - 有沒有更好的方法來完成這個?

編輯/澄清: 我應該提到的是,我之所以需要中介類是因爲我需要能夠ProductInfo

回答

1

返回的結果集爲一個特定的類型,在這種情況下,我想你「重新在正確的軌道上好看多了,但我不會真的擔心intermediery類:

var products = from p in db.Products 
      join c in db.Categories on p.CategoryID = c.ID 
      select new { p.ProdName, ProdId = p.ID, p.CategoryID, 
       CategoryName = c.CategoryName } 

然後,您可以把這個功能在使用LinqDataSource的選擇事件。 Scott Guthrie在他的文章「Using a Custom Linq Expression with the asp:LinqDataSource" control」中的「在選擇事件中執行自定義查詢預測」部分進行了討論。

0

哦,天哪,我應該提到的是,我之所以需要中介類是因爲我需要能夠返回結果集爲一個特定的類型,在這種情況下ProductInfo

0
List<ProductInfo> products = (from p in db.Products 
       join c in db.Categories on p.CategoryID = c.ID 
       select new ProductInfo { ProdName = p.ProdName, ProdID = p.ID, 
CategoryID = p.CategoryID, CategoryName = c.CategoryName }).ToList<ProductInfo>();