如何在使用Linq2Sql的方法中确定返回类型?

时间:2010-03-31 14:08:15

标签: linq-to-sql

对于linq,我通常遇到返回类型的困难。我将通过以下示例解释。假设我有一个表产品,其中包含ProductID,Name,Category和Price作为列:

1) IQueryable< *** Product * > **

public IQueryable<Product> GetChildrenProducts()
{
  return (from pd in db.Products
          where pd.Category == "Children"
          select pd);
}

2)产品

public Product GetProduct(int id)
{
  return (from pd in db.Products
          where pd.ProductID == id
          select pd).FirstOrDefault();
}

现在,如果我决定只选择一列(价格或名称)或甚至2或3列(名称和价格),但无论如何,少于4列,那将是什么返回类型?

我的意思是:

public returnType GetSomeInformation()
{
 return (from pd in db.Products
         select new { pd.Name, pd.Price }
}

GetSomeInformation() returnType 应该是什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

如果选择多个列而不是完整对象,LINQ将返回一个通用对象。如果要通过函数返回该数据子集,则需要创建自己的类并加载它:

public class MyObject
{
  public string Name { get; set; }
  public double Price { get; set; }
}

public MyObject GetSomeInformation()
{
 return (from pd in db.Products
         select new  MyObject {
           Name = pd.Name, 
           Price = pd.Price 
         }).FirstOrDefault();
}

答案 1 :(得分:2)

您不能在此上下文中使用var,因为当前只能在局部变量中推断类型。

所以:

Select()部分移至调用者,并返回普通IQueryable<Product>

public IQueryable<Product> GetSomeInformation()
{
  return (from pd in db.Products
          select pd);
}

var information = GetProductInformation().Select(p => new { p.Name, p.Price });

创建一个仅包含所需信息的返回类型ProductInformation:

class ProductInformation
{
  public string Name { get; set; }
  public decimal Price { get; set; }
}

public IQueryable<ProductInformation> GetSomeInformation()
{
  return (from pd in db.Products
          select new ProductInformation { Name=pd.Name, Price=pd.Price });
}

答案 2 :(得分:0)

简短回答:IEnumerable

答案很长:

您要返回的内容是anonymous type的集合,因此需要将返回类型设为IEnumerable