Cia*_*her 1 entity-framework entity-framework-4
(请在标记为重复之前阅读,因为我的特定方案是唯一的)
我有以下代码:
// 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();
}
Run Code Online (Sandbox Code Playgroud)
在运行该程序时,我从第二个数据库查询(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; }
}
Run Code Online (Sandbox Code Playgroud)
以下是排行榜模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
祝好运!
我现在无法测试它,但它可能是索引器,试试这个:
foreach (var treauserHunt in treasureHunts)
{
treasureHunt.Leaderboard = dbContext.Leaderboard.Where(leaderboard =>
leaderboard.TreasureHuntId == treasureHunt.TreasureHuntId).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是不是问题,但我记得在LINQ查询中有一些数组索引问题,只是不记得它是用LINQ方法语法(你正在使用的那个)还是另一个(SQL) -喜欢);
| 归档时间: |
|
| 查看次数: |
6459 次 |
| 最近记录: |