1

既存の (動作中の!) linq 式があります。

from ca in db.CustomAnswer
join ss in db.SurveySubmission on ca.SubmissionId equals ss.Id
join cq in db.CustomQuestion on ca.QuestionId equals cq.Id
where (ss.SurveyId == request.SurveyId)
orderby ss.Submitted, cq.SortOrder
select new
{
    SubmissionId = ss.Id,
    Answer = ca.Answer
}

選択のインデックスを新しいオブジェクトに追加したい、例えば

from ca in db.CustomAnswer
join ss in db.SurveySubmission on ca.SubmissionId equals ss.Id
join cq in db.CustomQuestion on ca.QuestionId equals cq.Id
where (ss.SurveyId == request.SurveyId)
orderby ss.Submitted, cq.SortOrder
select new
{
    SubmissionId = ss.Id,
    **Code = selectIndex,**
    Answer = ca.Answer
}

Select((q, index) => ...)これを行うには、フォームを使用できるように、まずクエリをメソッド構文に変換する必要があると思います。私の単純な考えでは、次のようにすべきだと思います。

  db.SurveySubmission
    .Where(ss => ss.SurveyId == request.SurveyId)
    .OrderBy(ss => ss.Submitted)
    .Join(db.CustomAnswer, ss => ss.Id, ca => ca.SubmissionId, (ss, ca) => new { ss, ca })
    .Join(db.CustomQuestion, o => o.ca.QuestionId, cq => cq.Id, (o, cq) => new { o.ss, o.ca, cq })
    .OrderBy(q => q.cq.SortOrder)
    .Select((q, idx) => new {
                                SubmissionId = q.ss.Id,
                                Answer = q.ca.Answer,
                                Code = idx
                            });

ただし、式が評価されると、エラーが発生します。

LINQ to Entities はメソッド 'System.Linq.IQueryable 1[<>f__AnonymousTypef3[System.Guid,System.String,System.Int32]] Select[<>f_ AnonymousTypee 3,<>f__AnonymousTypef3] (System.Linq.IQueryable 1[<>f__AnonymousTypee3[My.Data.Namespace .SurveySubmission, My.Data.Namespace.CustomAnswer,My.Data.Namespace.CustomQuestion]], System.Linq.Expressions.Expression 1[System.Func3[<>f _AnonymousTypee 3[My.Data.Namespace.SurveySubmission, My.Data.Namespace.CustomAnswer,My.Data.Namespace.CustomQuestion],System.Int32,<>f__AnonymousTypef3[System.Guid, System.String,System.Int32]]] )' メソッドであり、このメソッドは store 式に変換できません。

これが誰かにとって明白であることを願っていますか?私はそれを数時間見つめましたが、私ができる唯一の結論は、私は十分に賢くないということです...誰か助けてもらえますか??

4

1 に答える 1

5

SQL セットは順序付けされていないため、EF はそれを SQL に変換できません。インデックスのアイデアは、まったく意味がありません。

代わりに、EF クエリを使用してインデックスを取得する以外はすべて実行してから、linq to objects クエリでインデックスを追加します

var query = //your original query goes here

var finalQuery = query.AsEnumerable()
    .Select((answer, index) => new
        {
            answer.SubmissionId,
            answer.Answer,
            Code = index,
        });
于 2013-09-30T15:21:14.180 に答える