(私の特定のシナリオはユニークであるため、重複としてマークする前に読んでください)
次のコードがあります。
// 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();
}
プログラムを実行すると、2 番目のデータベース クエリ (dbContext.Leaderboard.Where...) から次のエラーが表示されます。
LINQ to Entities はメソッド 'QrCodeTreasureHunter.Models.TreasureHuntDetails get_Item(Int32)' メソッドを認識せず、このメソッドはストア式に変換できません。
最初のクエリでは、特定のユーザーに関連付けられた宝探しをそれぞれ取得しています。
2 番目の部分では、各トレジャー ハントを反復処理し、トレジャー ハントの Leaderboard List プロパティに、Leaderboard テーブルからの関連付けられたリーダーボード エントリを入力しようとしています。
私が読んで理解していることから、このクエリは 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; }
}
幸運を!