gpt4 book ai didi

c# - SelectMany 查询太多

转载 作者:行者123 更新时间:2023-11-30 17:04:15 26 4
gpt4 key购买 nike

我在用户组中有动态字段,我想根据用户组中的用户来选择它们。

基本上我想模拟像 .Where(x => x.UserGroupId == x || ... 这样的查询,否则它会进行大约 20 个查询来获取动态字段。

也许我可以以某种方式将整数数组作为 UserGroupId 传递,它会用 || 模拟查询。

这是我的例子,两个结果输出是一样的,唯一的区别是第一个对数据库有 20 个查询,第二个只有 1 个。

public IEnumerable<UserGroup> UserGroups
{
get
{
var db = new MainDataContext();
return db.UserGroupUsers.Where(x => x.UserId == this.Id).Select(x => x.UserGroup);
}
}
public IEnumerable<UserDynamicField> DynamicFields
{
get
{
var db = new MainDataContext();

var fields = this.UserGroups.SelectMany(x => x.UserGroupDynamicFields); // 20+ queries

var fields2 = db.UserGroupDynamicFields.Where(x =>
x.UserGroupId == 1 ||
x.UserGroupId == 2 ||
x.UserGroupId == 3 ||
x.UserGroupId == 4 ||
x.UserGroupId == 5 ||
x.UserGroupId == 6 ||
x.UserGroupId == 7 ||
x.UserGroupId == 8 ||
x.UserGroupId == 9 ||
x.UserGroupId == 10); // 1 query, maybe I can somehow pass array of Id's here?
}
}

最佳答案

尝试将其转换为 IQueryable<T>而不是 IEnumerable<T> :

public IQueryable<UserGroup> UserGroups
{
get
{
var db = new MainDataContext();
return db.UserGroupUsers.Where(x => x.UserId == this.Id)
.Select(x => x.UserGroup);
}
}
public IQueryable<UserDynamicField> DynamicFields
{
get
{
// 1 query
return this.UserGroups.SelectMany(x => x.UserGroupDynamicFields);
}
}

这将允许 Linq 利用在迭代之前不必将结果集拉入内存这一事实,因此这将被转换为传统的 SQL 连接。

关于c# - SelectMany 查询太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17710825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com