Linq を使用して、リポジトリから選択したデータを変換しようとしています。
これまでの私のコード:
Repository<Result> _repository = new Repository<Result>();
var disciplines = _repository.Query()
.Select(d => new Discipline
{
DisciplineCode = d.DisciplineCode,
Name = d.DisciplineName
})
.Distinct()
.ToList();
結果クラスは次のようになります。
public class Result
{
public virtual int ResultId { get; set; }
public virtual string DisciplineCode { get; set; }
public virtual string DisciplineName { get; set; }
public virtual int CompetitorId { get; set; }
//other stuff
}
これが実行されると、私は得る
式のシリアル化情報を特定できません: < MemberInitExpression >
何がうまくいかないのですか?
編集:
Chris の提案に従って、次のように ToList の後に Select を試しました。
var disciplines = _repository.Query()
.Select(d => new
{
DisciplineCode = d.DisciplineCode,
Name = d.DisciplineName
})
.Distinct()
.ToList()
.Select(d => new Discipline { DisciplineCode = d.DisciplineCode, Name = d.Name });
ただし、今回も同様のエラーですが、匿名型に関係しています。
式のシリアル化情報を特定できません: new __AnonymousType(d.DisciplineCode, d.DisciplineName)。
編集2:
明確にするために、.Query は IQueryable を返し
ます 基礎となるデータベースは MongoDB です (C# ドライバーを使用)
私がこれを行う場合:
var disciplines = _repository.Query()
.Select(d => d.DisciplineName)
.Distinct()
.ToList()
できます。distinct
つまり、DisciplineNamesのリストを取得します。
ただし、名前だけでなく、より多くのプロパティを選択できる必要があります。