我真的不知道这是否有意义,但我会尝试一下,因为我自己没有得到任何东西,我需要学习。
我有这段代码:
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();
它因为它为空而中断。我该如何解决这个问题?
答案 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();