首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Linq一对多查询EF核心

C# Linq一对多查询EF核心
EN

Stack Overflow用户
提问于 2020-02-06 09:40:33
回答 1查看 118关注 0票数 0

我有一个复选框项的表和一个存储用户所选复选框项的表。在EF中,淡化模型本质上是这样的

CheckboxItem模型属性:

代码语言:javascript
复制
public CheckboxItem()
{
    SelectedCheckboxItems = new HashSet<SelectedCheckboxItems>
}

public int Id { get; set; }
public virtual ICollection<SelectedCheckboxItems> SelectedCheckboxItems { get; set; }

SelectedCheckboxItems模型属性:

代码语言:javascript
复制
public int Id { get; set; }
public virtual Checkbox Checkbox { get; set; }

我正在尝试获取所有可用的复选框项及其相应的选定复选框项,并将它们放入视图模型中,稍后我将使用该视图模型来填充正确的复选框/预先选择其选定的选项。

到目前为止,我已经有了一个有效的解决方案,但查询速度很慢,大约需要4-5秒才能完成查询:

代码语言:javascript
复制
 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秒内完成这个查询感觉相当慢。

EN

回答 1

Stack Overflow用户

发布于 2020-02-06 10:00:11

将ToList()更改为AsQueryable()。ToList()会导致性能降低。

这个怎么样?

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60086559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档