Присоединяйтесь к лямбда-выражению - PullRequest
1 голос
/ 08 ноября 2011

я просто пытаюсь объединиться из двух сущностей.

эти две пустяки следующие:

public partial class AnswerSet
{
    public int Id { get; set; }
    public string Ans { get; set; }
    public bool IsTrue { get; set; }
    public int QuestionId { get; set; }

    public virtual QuestionSet QuestionSet { get; set; }
}

и

public partial class QuestionSet
{
    public QuestionSet()
    {
        this.AnswerSets = new HashSet<AnswerSet>();
    }


    public int Id { get; set; }

    public string Quest { get; set; }

    public virtual ICollection<AnswerSet> AnswerSets { get; set; }
}

Итак, естьвопрос и объект ответа в базе данных.1 Вопрос имеет больше ответов (в моем примере 4).Итак, теперь я попробовал это:

 var v1 = db.QuestionSets
    .Select(q => q)
    .Where(q=> q.Id == 11)
    .Join(db.AnswerSets, 
            q => q.Id, 
            a => a.QuestionId, 
            (a, q) => new { question = q });

Итак, теперь у меня есть следующий вывод, когда выражение такое же, как указано выше (см. Изображение 1):

Здесь у меня есть только ответы.когда я изменяю выражение на:

var v1 = db.QuestionSets
    .Select(q => q)
    .Where(q=> q.Id == 11)
    .Join(db.AnswerSets, 
            q => q.Id, 
            a => a.QuestionId, 
            (q, a) => new { question = q });

, тогда я получаю следующий вывод (см. изображение 2): (только вопрос, но в 4 раза больше ответов).

Итак, мой вопрос, как я могу объединить эти две сущности, чтобы ответы были набором в сущности QuestionSet?

спасибо

Изображение 1 Изображение2

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Вы хотите присоединиться к группе (см. http://msdn.microsoft.com/en-us/library/bb311040.aspx)

var QAs =
    from q in db.QuestionSets
    join a in db.AnswerSets 
       on q.Id equals a.QuestionId into answers
    select new { Question = q, Answers = answers };

В синтаксисе метода расширения:

var QAs = db.QuestionSets
    .GroupJoin(
         db.AnswerSets, 
         q => q.Id, 
         a => a.QuestionId,
         (q, answers) => new {Question = q, Answers = answers});

Надеюсь, что поможет

PS. Используйте его какитак:

foreach (var qa in QAs)
{
    Console.WriteLine("Question #{0} has {1} answers", 
         qa.Question.Id, qa.Answers.Count());
}
0 голосов
/ 21 января 2013

Как насчет того, чтобы оставить технику Join для сложного запроса и использовать Ef Eager Загрузка с помощью Include

var v1 = db.QuestionSets.Include(b = b.Answer);

или

var v1 = db.QuestionSets.Include("Answer");
...