繁体   English   中英

LINQ to SQL实体到对象的转换

[英]LINQ to SQL entity to object conversion

如您所知,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.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),返回相同的内容!

发生这种情况是因为l2sql尝试提出您的投影的翻译。 取而代之的是,只需在检索数据后进行投影:

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

一个建议-不要混用linq样式和扩展方法样式这两种样式。 这降低了可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM