C# 如何使用LINQ在函数中定义返回类型?

C# 如何使用LINQ在函数中定义返回类型?,c#,asp.net,linq,linq-to-sql,entity-framework,C#,Asp.net,Linq,Linq To Sql,Entity Framework,我想知道如何在中的函数中定义returntype 下面的情况 我有一个产品,我一次返回所有信息或一个产品 正如您在下面定义的函数中所看到的 public static Products GetProducts(int pid) { var pro = from p in context.Products select p; if(pid > 0) pro = pro.where(p => p.ProductID ==p

我想知道如何在中的函数中定义returntype 下面的情况

我有一个产品,我一次返回所有信息或一个产品

正如您在下面定义的函数中所看到的

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.Theaters]”的对象强制转换为类型为“TTDCore.Theaters”

当我将它绑定到gridview时。这是一个密码

Products p = Class1.GetProducts(0);

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

您希望返回
IEnumerable
,它表示
产品类型的对象的可数(或可枚举)。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;
}
公共静态IEnumerable GetProducts(int-pid)
{
var pro=来自context.Products中的p
选择p;
如果(pid>0)
pro=pro.Where(p=>p.ProductID==pid)
return-pro;
}

如果你的问题中有别的意思,请告诉我。我不完全确定您到底在搜索什么。

您想返回
IEnumerable
,它表示
产品
类型的对象的可数(或可枚举)。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;
}
公共静态IEnumerable GetProducts(int-pid)
{
var pro=来自context.Products中的p
选择p;
如果(pid>0)
pro=pro.Where(p=>p.ProductID==pid)
return-pro;
}

如果你的问题中有别的意思,请告诉我。我不完全确定您到底在搜索什么。

我喜欢用Linq查询和lambdas来明确说明。我建议将函数定义为List(或IEnumerable),然后将.ToList()添加到where语句中。我假设产品类型是某种集合?

我喜欢用Linq查询和lambda显式表示。我建议将函数定义为List(或IEnumerable),然后将.ToList()添加到where语句中。我假设产品类型是某种集合?

是的,这正是我想要的。只是一个简单的例子,我试过了&它在gridview上运行得很好。但如果返回单个记录。我是这样做的,这样对吗?Products p=(Products)Class1.GetProducts(1.FirstOrDefault();Response.Write(p.ProductName);它的作品让瓦纳知道这是不是一种正确的方式。谢谢你的快速反应。啊,很好。:)是的,你建议的返回一张唱片的方法应该很有效。根据情况,First/FirstOrDefault或Single/SingleOrDefault扩展方法是合适的。如果存在多个匹配项,则后一个(单个)将抛出异常,而前一个(第一个)当然只返回第一个,然后停止枚举。
OrDefault
位的意思是,如果没有匹配项,则返回默认值(对于引用类型为null),而不是抛出异常。查询也可以表示为一个表达式:从上下文中的p。Products其中p.ProductID==pid&&pid>0选择pyes这正是我要查找的。只是一个简单的例子,我试过了&它在gridview上运行得很好。但如果返回单个记录。我是这样做的,这样对吗?Products p=(Products)Class1.GetProducts(1.FirstOrDefault();Response.Write(p.ProductName);它的作品让瓦纳知道这是不是一种正确的方式。谢谢你的快速反应。啊,很好。:)是的,你建议的返回一张唱片的方法应该很有效。根据情况,First/FirstOrDefault或Single/SingleOrDefault扩展方法是合适的。如果存在多个匹配项,则后一个(单个)将抛出异常,而前一个(第一个)当然只返回第一个,然后停止枚举。
OrDefault
位仅表示如果没有匹配项,则返回默认值(对于引用类型为null),与引发异常相反。查询也只能表示为一个表达式:从上下文中的p。产品,其中p.ProductID==pid&&pid>0选择pProduct is Table in my sql Server Database=实体框架中的实体类。你认为这个场景的最佳方式是什么?我不认为你需要将函数的返回类型定义为产品。您正在查询中指定产品,这就足够了。因此,如果我正确理解了目标,您的返回类型应该是IEnumerable或List。它们将很好地绑定到您的GridView。你认为这个场景的最佳方式是什么?我不认为你需要将函数的返回类型定义为产品。您正在查询中指定产品,这就足够了。因此,如果我正确理解了目标,您的返回类型应该是IEnumerable或List。它们将绑定到您的GridView。