LINQ到SQL实体到对象的转换

本文关键字:转换 对象 实体 SQL LINQ | 更新日期: 2023-09-27 18:07:09

如您所知,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();

它工作(User是我创建的一个类)。但是当我尝试泛化并构建一个类型转换函数时:

User castToUser (DataAccess.AppData.User linqEntity)
{
    return new User
    {
        Id = linqEntity.Id,
        Name = linqEntity.Name,
        Password = linqEntity.Password
    };
}

(DataAccess.AppData。用户是LINQ到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),它返回相同的东西!

LINQ到SQL实体到对象的转换

发生这种情况是因为l2sql试图对您的投影进行翻译。相反,只需让它在检索到数据后进行投影:

AppData.MyDBDataContext context = new AppData.MyDBDataContext();
List<User> users = context.Users
   .Where( u => u.Password == "123456" )
   .ToList() // fetch
   .Select( u => castToUser( u ));

一个建议-不要混合两种风格,linq风格和扩展方法风格。