LINQ to SQL 实体到对象的转换
LINQ to SQL entity to object conversion
如您所知,LINQ to SQL 生成自己的实体。
我尝试从数据库中获取数据并将其放入我自己创建的实体 classes 中。
当我这样做时:
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();
有效(User
是我创建的 class)。
但是当我尝试概括并构建一个转换函数时:
User castToUser (DataAccess.AppData.User linqEntity)
{
return new User
{
Id = linqEntity.Id,
Name = linqEntity.Name,
Password = linqEntity.Password
};
}
(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();
它抛出一个错误: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
}
到 castToUser(x),returns 一样!
发生这种情况是因为 l2sql 试图翻译您的投影。相反,只需在检索数据后让它进行投影:
AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = context.Users
.Where( u => u.Password == "123456" )
.ToList() // fetch
.Select( u => castToUser( u ));
一个建议 - 不要混用这两种风格,linq 风格和扩展方法风格。这会降低可读性。
如您所知,LINQ to SQL 生成自己的实体。 我尝试从数据库中获取数据并将其放入我自己创建的实体 classes 中。
当我这样做时:
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();
有效(User
是我创建的 class)。
但是当我尝试概括并构建一个转换函数时:
User castToUser (DataAccess.AppData.User linqEntity)
{
return new User
{
Id = linqEntity.Id,
Name = linqEntity.Name,
Password = linqEntity.Password
};
}
(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();
它抛出一个错误: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
}
到 castToUser(x),returns 一样!
发生这种情况是因为 l2sql 试图翻译您的投影。相反,只需在检索数据后让它进行投影:
AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = context.Users
.Where( u => u.Password == "123456" )
.ToList() // fetch
.Select( u => castToUser( u ));
一个建议 - 不要混用这两种风格,linq 风格和扩展方法风格。这会降低可读性。