2009-05-17 46 views
1

我想知道如何在 的情況下在函數中定義一個返回類型。如何使用LINQ定義函數中的返回類型?

我有一個產品,我一次返回所有信息或一個產品。

你可以在我的下面定義的函數中看到。

public static Products GetProducts(int pid) 
{ 
    var pro = from p in context.Products 
       select p; 

    if(pid > 0) 
     pro = pro.where(p => p.ProductID ==pid) 

    return (Products)p; 
} 

問題是它給我鑄造錯誤。因爲你可以看到我想要實現的是基於我的參數給它一個結果集。一段時間一堆產品&一段時間單品。我新linq所以任何幫助將不勝感激。

該錯誤是無法轉換類型的對象 'System.Data.Objects.ObjectQuery`1 [TTDCore.Theatres]' 爲類型 'TTDCore.Theatres'

時,即時通訊結合它的GridView 。這裏是一個代碼

Products p = Class1.GetProducts(0); 

GridView1.DataSource = p; 
GridView1.DataBind(); 

回答

6

要返回IEnumerable<Product>,它表示一個迭代(或枚舉)Product類型的對象。一般情況下,LINQ都基於這個泛型類型,所以它通常是你想要作爲查詢返回的結果。

我相信你的代碼應該是固定的,成爲這樣的事情:

public static IEnumerable<Products> GetProducts(int pid) 
{ 
    var pro = from p in context.Products 
       select p; 

    if(pid > 0) 
     pro = pro.Where(p => p.ProductID == pid) 

    return pro; 
} 

讓我知道你的意思是你的問題別的東西。我不完全確定你究竟在尋找什麼。

+0

是的,這正是我正在尋找的。只是一個快速的我試過這個&GridView的工作正常。但如果在返回單個記錄的情況下。我以這種方式做這是一個正確的方式嗎? 產品p =(Products)Class1.GetProducts(1).FirstOrDefault(); Response.Write(p.ProductName); 其作品只是發現它是否正確。 thanx爲你的快速反應。 – Andy 2009-05-17 22:58:06

+0

啊,很好。 :)是的,你提出的返回單個記錄的方式應該可以正常工作。根據情況,First/FirstOrDefault或Single/SingleOrDefault擴展方法是合適的。後者(單)會拋出一個異常,如果有*多於一個匹配,而前者(第一個)當然只是返回第一個,然後停止枚舉。如果沒有匹配,`OrDefault`位意味着返回默認值(對於引用類型爲null),而不是拋出異常。 – Noldorin 2009-05-17 23:05:58

0

我喜歡用Linq查詢和lambda表達式進行顯式。我建議將函數定義爲列表<產品>(或IEnumerable <產品>),然後將.ToList()添加到您的where語句。我假設Products類型是某種集合?

相關問題