are*_*ler 0 .net c# linq linq-to-sql
如您所知,LINQ to SQL生成自己的实体.我尝试从数据库中获取数据并将其放在我自己的实体中,我创建的类.
当我这样做时:
AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = (from user in context.Users.Select(x => new User
{
Id = x.Id,
Name = x.Name,
Password = x.Password
}) where user.Password == "123456" select user).ToList();
Run Code Online (Sandbox Code Playgroud)
它有效(User是我创建的一个类).但是当我尝试概括和构建一个强制转换函数时:
User castToUser (DataAccess.AppData.User linqEntity)
{
return new User
{
Id = linqEntity.Id,
Name = linqEntity.Name,
Password = linqEntity.Password
};
}
Run Code Online (Sandbox Code Playgroud)
(DataAccess.AppData.User是LINQ to SQL生成的实体).
AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = (from user in context.Users.Select(x => castToUser(x)) where user.Password == "123456" select user).ToList();
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误: Method 'DataAccess.Entities.User castToUser(DataAccess.AppData.User)' has no supported translation to SQL.
错误仅在更改时出现
new User
{
Id = x.Id,
Name = x.Name,
Password = x.Password
}
Run Code Online (Sandbox Code Playgroud)
to castToUser(x),返回相同的东西!
这是因为l2sql试图提出您的投影的翻译.相反,只需在检索数据后进行投影即可:
AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = context.Users
.Where( u => u.Password == "123456" )
.ToList() // fetch
.Select( u => castToUser( u ));
Run Code Online (Sandbox Code Playgroud)
建议 - 不要混合使用linq样式和扩展方法样式这两种样式.这降低了可读性.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |