2009-05-17 47 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类型是某种集合?

相关问题