(Пожалуйста, прочитайте, прежде чем помечать как дубликат, поскольку мой конкретный сценарий уникален)
У меня есть следующий код:
// 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; }
}
Удачи!