我创建了一个qr
对象来获取总项目数而不从数据库获取所有数据,并且如果有必要还选择MyViewModel
list
var qr = dbSet.Select(o =>
new { ParentID = o.Parent.ID, o.Parent.Name, o.ID})
.Select(o => new MyViewModel(o.ParentID, o.Name, o.ID));
但是,当我尝试qr.Count()
和qr.ToList()
时,他们都在数据库中运行相同的查询,这不仅适用于项目'计数。
获得“MyViewModel”的最佳和最快捷方式是什么?项目'本身或物品'同时计算或同时计算两者?
答案 0 :(得分:0)
您在linq查询中调用.AsEnumerable()
。这意味着任何translate-your-query-into-SQL都会在那里停止,之后的任何内容都不会被转换为SQL。因此,将在您的数据库中运行的唯一查询是检索完成dbSet
。如果您只想检索计数,请运行以下linq查询
var qrCount = dbSet.Count();
答案 1 :(得分:0)
此查询的问题是因为它在
中调用了MyViewModel的构造函数.Select(o => new MyViewModel(o.ParentID, o.Name, o.ID))
此调用有效地将IQueryable转换为IEnumerable,因为无法从查询中调用构造函数。
要避免此转换,请使用对象初始值设定项而不是构造函数:
.Select(o => new MyViewModel
{
ParentID = o.ParentID,
Name = o.Name,
ID = o.ID
})