我有一个复选框项的表和一个存储用户所选复选框项的表。在EF中,淡化模型本质上是这样的
CheckboxItem模型属性:
public CheckboxItem()
{
SelectedCheckboxItems = new HashSet<SelectedCheckboxItems>
}
public int Id { get; set; }
public virtual ICollection<SelectedCheckboxItems> SelectedCheckboxItems { get; set; }SelectedCheckboxItems模型属性:
public int Id { get; set; }
public virtual Checkbox Checkbox { get; set; }我正在尝试获取所有可用的复选框项及其相应的选定复选框项,并将它们放入视图模型中,稍后我将使用该视图模型来填充正确的复选框/预先选择其选定的选项。
到目前为止,我已经有了一个有效的解决方案,但查询速度很慢,大约需要4-5秒才能完成查询:
var testSub = _context.CheckboxItem.Include(a => a.SelectedCheckboxItems).Where(a => a...// filters)
.Select(a => new ViewModel
{
CheckboxItemId = a.Id,
Checked = a.SelectedCheckboxItems.Where(x => x.userId.Equals(userId) && x.Id == a.Id).Select(z => z.Checked == true).FirstOrDefault()
}).AsNoTracking().ToList();最终目标是真正返回一个ViewModel对象列表,其中包含所有可用的复选框项,以及用户是否选择了该项。
关于如何改进或以任何方式优化它,让它变得更快,有什么建议吗?这个表实际上只有15个可用的复选框项,所以在4-5秒内完成这个查询感觉相当慢。
发布于 2020-02-06 10:00:11
将ToList()更改为AsQueryable()。ToList()会导致性能降低。
这个怎么样?
var selectedlist = db.SelectedCheckboxItems;
var testSub = _context.CheckboxItem.Where(a => a...// filters)
.Select(a => new ViewModel {
CheckboxItemId = a.Id,
Checked = selectedlist.Where(x => x.userId.Equals(userId) && x.Id == a.Id).Select(z => z.Checked == true).FirstOrDefault()
}).AsNoTracking().AsQueryable();https://stackoverflow.com/questions/60086559
复制相似问题