对于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 应该是什么?
感谢您的帮助
答案 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)