0
比方说,我有以下实体WCF RIA,LINQ到实体投影,过滤,延迟执行
用户
- 用户名
- 用户名
- UserNameAsLower
- 简介(导航属性)
档案
- 用户名
- 电子邮件
- EmailAsLower
- 语言
,我想返回一个统一的目标,让我们把它叫做UserDTO,但删除一些我们不希望用户看到的字段(AsLower stuff)
- UserDTO
- 用户名
- 用户名
- 电子邮件
- 语言
如果我写一个LINQ查询,如下所示,然后将其应用过滤标准,将它在过滤标准被应用之后的那一刻执行到预计的类属性名称?
public IQueryable<UserDTO> GetUsers()
{
IQueryable<UserDTO> users = (from u in Entities.Users select new UserDTO() { UserID = u.UserID, UserName = u.UserName, Email = u.Profile.Email, Language = u.Profile.Email });
users = users.Where(u => u.UserName.Contains("Admin"));
return users;
}
我问的原因是,如果它背后的数据库表恰好是真正的大(数百万条记录),我想,以确保它不会尝试它第一次加载到内存中。
你实际上是在你的数据库中存储UserName和UserNameAsLower? – Jeff
是的,如果您公开IQueryable而不是IEnumerable,则服务调用将包含客户端应用到执行点的过滤器。 – Jeff
我正在使用这个例子,不一定是真正的代码。如果你想要一个更复杂的版本:看看ASP.NET身份验证数据库表,它获得了所有这些,并且更多地分布在各种表中。 但问题是更多的将它执行的地方或在表中序列化执行 1 000 000的记录,预计将列出,过滤出表 OR 1 000 000条记录,过滤掉,然后再投影 – Rickster