我正在尝试创建一个使用来自 2 个独立实体的数据的 ViewModel。我希望我的 ViewModel 显示来自 Game 类的所有数据,并从 Developer 模型附加相应的 developerName 值。
我正在使用来自游戏类的数据填充模型变量,并尝试通过调用一个辅助方法来包含开发人员的姓名,该方法在提供 ID 时输出开发人员的姓名。
这当然行不通,LINQ 查询将失败并出现 NotSupportedException 说明:
LINQ to Entities does not recognize the method 'System.String GetDeveloperNameFromId(Int32)' method, and this method cannot be translated into a store expression.
这是当前的尝试:
游戏控制器.cs
var model = _db.Games
.OrderByDescending(r => r.Name)
.Select(r=> new GameViewModel
{
Id = r.Id,
Name = r.Name,
Rating = r.Rating,
ReleaseDate = r.ReleaseDate,
Type = r.Type,
DeveloperId = r.DeveloperId,
DeveloperName = GetDeveloperNameFromId(r.DeveloperId)
})
.Where(r => searchTerm == null || r.Name.StartsWith(searchTerm));
private string GetDeveloperNameFromId(int id)
{
var _model = _db.Developers.FirstOrDefault(r => r.Id.Equals(id));
string _name = _model.Name;
return _name;
}
游戏视图模型.cs
public class GameViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Rating { get; set; }
public DateTime ReleaseDate { get; set; }
public string Type { get; set; }
public string DeveloperName { get; set; }
public int DeveloperId { get; set; }
}
游戏.cs
public class Game
{
public int Id { get; set; }
public string Name { get; set; }
public string Rating { get; set; }
public DateTime ReleaseDate { get; set; }
public string Type { get; set; }
[Display(Name = "Developer")]
public int DeveloperId { get; set; }
}
我确定有更好的方法来添加开发人员姓名,可能是使用连接 LINQ 查询,或者可能修改模型变量的范围以包含多个实体?
更好的是在 ViewModel 中自动填充 DeveloperName 字段,这可能吗?