【发布时间】:2011-10-20 15:25:01
【问题描述】:
我正在访问远程数据源,发现组连接导致 IQueryable 查询转换为 IEnumerable,
问题:这会影响性能吗?我想将尽可能多的查询卸载到数据库中,而不是在内存中执行任何内容...
var allusers = repo.All<User>().Where(x => x.IsActive);
var _eprofile = repo.All<Profile>()
.Where(x => x.IsProfileActive)
.Join(allusers, x => x.UserID, y => y.UserID, (x, y) => new
{
eProfile = x,
profile = y
})
.GroupJoin(_abilities, x => x.eProfile.ID, y => y.ID, (x, y) => new QuoteDTO
{
UserID = x.profile.Login,
Email = x.profile.Email,
Tel = x.profile.Tel,
Mobile = x.eProfile.Mobile,
CompanyID = x.profile.CompanyID,
Ability = y.Select(c => new AbilityDTO
{
Name= c.Name
})
});
行: .GroupJoin(_abilities, x => x.eProfile.ID, y => y.ID, (x, y) => new QuoteDTO
- _abilities是一个IQueryable,我得到一个用户的能力,一个对象的集合
- 第二部分 (x,y) - 这里 y 被转换为 IEnumerable...
var cLists = List<int>(); //这个集合是由客户端代码填充的,可以这么说
//出于参数考虑,包含 1,3,55...
var _abilities= repo.All<UserAbility>()
.Where(x => x.Status == Status.Active.ToString())
.Where(x => cLists.Contains(x.CompetencyID));
注意:我使用 var 的原因是为了可以转换成我喜欢的对象,在插入 DTO 对象之前我使用了很多匿名类型...
【问题讨论】:
-
哪个位被“转换为 IEnumerable”?什么是_abilities?
-
它是一个子查询,我已经更新了上面的代码...
-
_abilities是IQueryable吗?所有变量的数据类型是什么?请不要使用var,我们无法推断变量类型以及编译器。 -
上面的子查询我也要加...
标签: c# linq-to-sql iqueryable