public class GridData
{
public static IList gridDatos()
{
{
using (EnterpriseEntities dbcontext = new EnterpriseEntities())
{
var _products = dbcontext.Products.
Include(c => c.TypeProducts).ToList();
return _products;
}
}
}
}
发布于 2015-12-02 01:05:03
您忘记在方法的返回类型部分指定要返回的IList
类型。
public static IList<Product> gridDatos()
{
using (var dbcontext = new EnterpriseEntities())
{
var _products = dbcontext.Products.
Include(c => c.TypeProducts).ToList();
return _products;
}
}
或者你有DTO的/POCCO的/ ViewModels,你可以在你的LINQ表达式中对其进行投影,以确保你只对你的数据库执行一次查询。如果不是,如果您在razor视图中迭代Product集合并尝试访问不同类型的Navgation属性,它将对其中的每个唯一记录再次执行查询。阅读有关延迟执行here的更多信息。
假设你有一个这样的DTO
public class ProductDto
{
public int Id {set;get;}
public string Name {set;get;}
public List<TypeProductDto> Types {set;get;}
}
public class TypeProductDto
{
public class string TypeName {set;get; }
}
因此,在您的LINQ表达式中,将结果投影到新的DTO
public static List<ProductDto> GetProducts()
{
using (var dbcontext = new EnterpriseEntities())
{
var _products = dbcontext.Products.
Select(x=> new ProductDto
{ Id =x.Id,
Name =x.Name,
Types= x.TypeProducts
.Select(t=>new TypeProductDto
{ Name =x.Name})
}).ToList();
return _products;
}
}
这将只执行一个查询,并将结果映射到DTO。
https://stackoverflow.com/questions/34023453
复制相似问题