(请在标记为重复之前阅读,因为我的特定场景是独一无二的)
我有以下代码:
// Get each treasure hunt
var treasureHunts = dbContext.TreasureHunts.Where(i => i.UserName == User.Identity.Name).ToList();
// Populate each treasure hunt with the list of leaderboard entries
for (int i = 0; i <= treasureHunts.Count; i++)
{
treasureHunts[i].Leaderboard = dbContext.Leaderboard.Where(
leaderboard => leaderboard.TreasureHuntId == treasureHunts[i].TreasureHuntId).ToList();
}
在运行程序时,我从第二个数据库查询(dbContext.Leaderboard.Where...)中得到以下错误:
LINQ to Entities 无法识别方法 'QrCodeTreasureHunter.Models.TreasureHuntDetails get_Item(Int32)' 方法,并且此方法无法转换为存储表达式。
在第一个查询中,我得到了与特定用户关联的每个寻宝活动。
在第二部分中,我尝试遍历每个寻宝活动,并使用我的排行榜表中的相关排行榜条目填充寻宝活动的排行榜列表属性。
根据我从阅读中了解到的情况,使用 Entity Framework 无法以当前形式进行此查询。
您可以推荐哪些解决方法或解决方案来解决此问题?理想的解决方案不涉及对数据模型的更改。
如果相关,这里是 TreasureHunt 模型:
public class TreasureHuntDetails
{
public TreasureHuntDetails()
{
Clues = new List<Clue>();
Leaderboard = new List<Leaderboard>();
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
var dcs = new DataContractSerializer(typeof (TreasureHuntDetails), null, int.MaxValue,
false, true, null);
xml.SetSerializer<TreasureHuntDetails>(dcs);
}
[Key]
public int TreasureHuntId { get; set; }
[Required]
public virtual string UserName { get; set; }
[Required]
public String Name { get; set; }
public String Description { get; set; }
[Required]
public String Password { get; set; }
public String CompletionMessage { get; set; }
public String State { get; set; }
public List<Clue> Clues { get; set; }
public List<Leaderboard> Leaderboard { get; set; }
}
这是排行榜模型:
public class Leaderboard
{
[Key]
public int Id { get; set; }
public int TreasureHuntId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Completion { get; set; }
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
public Int64 TimeTaken { get; set; }
public TreasureHuntDetails TreasureHuntDetails { get; set; }
}
祝你好运!