モデル内のリストを取得するにはどうすればよいですか?
これは私がしようとしているものです:
private void cbxPlayers_SelectedValueChanged(object sender, EventArgs e)
{
List<Record> records = new List<Record>();
string selectedPlayer = cbxPlayers.SelectedItem.ToString();
using (ProgressRecordContext context = new ProgressRecordContext())
{
records = (from Player in context.Players
where Player.Name == selectedPlayer
select Player.Records).ToList<Record>();
}
}
それは機能しませんが、何が欠けていますか?
必要な場合のモデルは次のとおりです。
public class Player
{
[Key][DatabaseGenerated(DatabaseGeneratedOption.None)]
public int AccountNumberId { get; set; }
public string Name { get; set; }
public virtual List<Record> Records { get; set; }
}
public class Record
{
public int RecordId { get; set; }
public int AccountNumberId { get; set; }
public double Level { get; set; }
public int Economy { get; set; }
public int Fleet { get; set; }
public int Technology { get; set; }
public int Experience { get; set; }
public DateTime TimeStamp { get; set; }
public virtual Player Player { get; set; }
}
編集:エラーメッセージは次のとおりです。
エラー 1 'System.Linq.IQueryable>' には 'ToList' の定義が含まれておらず、最適な拡張メソッド オーバーロード 'System.Linq.ParallelEnumerable.ToList(System.Linq.ParallelQuery)' に無効な引数がいくつか含まれています
エラー 2 インスタンス引数: 'System.Linq.IQueryable>' から 'System.Linq.ParallelQuery' に変換できません
編集:
自分が何をしようとしていたのか、おそらくあまり明確ではなかったことがわかります。私は最終的に、私が望んでいたことを行う方法を考え出しました。
private void cbxPlayers_SelectedValueChanged(object sender, EventArgs e)
{
lstvRecords.Items.Clear();
if(cbxPlayers.SelectedIndex == -1)
{
return;
}
string selectedPlayer = cbxPlayers.SelectedItem.ToString();
using (ProgressRecordContext context = new ProgressRecordContext())
{
var records = from Player in context.Players
from Record in context.Records
where Player.Name == selectedPlayer &&
Player.AccountNumberId == Record.AccountNumberId
select new
{
Level = Record.Level,
Economy = Record.Economy,
Fleet = Record.Fleet,
Technology = Record.Technology,
Experience = Record.Experience,
TimeStamp = Record.TimeStamp
};
foreach (var element in records)
{
string[] elements = {element.Level.ToString(),
element.Economy.ToString(),
element.Fleet.ToString(),
element.Technology.ToString(),
element.Experience.ToString(),
element.TimeStamp.ToString()
};
ListViewItem lvi = new ListViewItem(elements);
lstvRecords.Items.Add(lvi);
}
}
}
そのクエリを記述するより良い方法はありますか、それとも私が行った方法は正しいですか?