public class GridData
{
public static IList gridDatos()
{
{
using (EnterpriseEntities dbcontext = new EnterpriseEntities())
{
var _products = dbcontext.Products.
Include(c => c.TypeProducts).ToList();
return _products;
}
}
}
}
答案 0 :(得分:0)
您忘记在方法的返回类型部分中指定要返回的public static IList<Product> gridDatos()
{
using (var dbcontext = new EnterpriseEntities())
{
var _products = dbcontext.Products.
Include(c => c.TypeProducts).ToList();
return _products;
}
}
类型。
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; }
}
或者您有DTO&POCCO / ViewModel,您可以在LINQ表达式中对其进行投影,以确保您只对数据库执行一次查询。如果没有,如果您在剃刀视图中迭代Product集合并尝试访问其他类型的Navgation属性,它将再次为那里的每个唯一记录执行查询。阅读有关延期执行的更多信息here。
所以,让我们说你有像这样的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;
}
}
因此,在您的LINQ表达式中,将结果投影到我们的新DTO
{{1}}
这将只执行一个查询并将结果映射到DTO。