SqlQuery和null值

时间:2014-01-03 20:36:12

标签: c# sql frameworks entity

我真的不知道这是否有意义,但我会尝试一下,因为我自己没有得到任何东西,我需要学习。

我有这段代码:

List<User> topuser = db.Database.SqlQuery<User>("SELECT TOP 5 * FROM Users ORDER BY DimensaoRede DESC").ToList();

我有一个方法可以将“User”类型的对象转换为UserModel,如下所示:

我遍历列表并转换其中的用户

public static UserModel UserToUserModel(User user){
    UserModel model = new UserModel
    {
        id = user.UserId,
        AdvanceLevel = user.AdvanceLevel,
        DimensaoRede = user.DimensaoRede,
        FortalezaRede = user.FortalezaRede,
        NormalLevel= user.NormalLevel,
        UserName = user.UserName
    };

    if (user.Facebook!=null) model.Facebook= user.Facebook;
    if (user.LinkedDin != null) model.LinkedDin = user.LinkedDin;
    if (user.Status != null) model.Status = user.Status.Descrição;
    if (user.Nome != null) model.Nome = user.Nome;
    model.Tags = user.Tags.Select(s => s.Nome).ToList();

    return model;
}

但用户在创建标签列表时“标签”为空,因此当他查询数据库时,列表标签为空。

所以当应用程序运行时:

model.Tags = user.Tags.Select(s => s.Nome).ToList();

它因为它为空而中断。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用LINQ而不是Sql查询来解决它。

var users = db.Users.Include(u => u.Tags)
                     .OrderByDescending(u => u.DimensaoRede)
                     .Take(5);

您的用户类应该有navigation property命名标签来执行此操作。这是最干净,最简单的方法。使用LINQ您不需要其他方法来转换您的用户,您可以执行以下操作:

var userModels = var users = db.Users.Include(u => u.Tags)
                     .OrderByDescending(u => u.DimensaoRede)
                     .Take(5)
                     .Select(u => new UserModel {
                                  id = u.UserId,
                                  AdvanceLevel = u.AdvanceLevel,
                                  DimensaoRede = u.DimensaoRede,
                                  FortalezaRede = u.FortalezaRede,
                                  NormalLevel= u.NormalLevel,
                                  UserName = u.UserName,
                                  Facebook = u.Facebook != null ? u.Facebook : null,
                                  LinkedDin = u.LinkedDin != null ? u.LinkedDin : null,
                                  Status = u.Status  != null ? u.Status  : null,
                                  Nome = u.Nome != null ? u.Nome : null,
                                  Tags = u.Tags.Select(s => s.Nome).ToList()
                               }).ToList();