none
LINQ обработка таблиц один ко многим в коде RRS feed

  • Вопрос

  • Здравствуйте.
    Помогите пожалуйста начинающему программисту.
    Есть две таблицы:
    EVENT
    -------------
    Id(int)
    Date(datetime)
    Title(nvarchar)
    Body(nvarchar)
    PersonID(int)
    CategoryID(int)


    PERSON
    -------------
    Id(int)
    FirstName(nvarchar)
    LastName(nvarchar)

    Таблицы должны быть связаны один-ко-многим, к одному EVENT`у принадлежит множество PERSON.
    Попробовал так выбрать нужное:

    var query = from e in db.Event
                join p in db.Person on e.PersonID equals p.Id
                select new { e.CategoryId, Date = e.Date.ToString(), e.Title, e.Body, p };
    foreach (var events in query)
                {
    // Тут забираю данные типа events.CategoryId, events.Date, events.Title, events.Body
                        foreach(Persons Person in events.p)
                        {
                            // Тут думаю что будет что то вроде Person.Id, Person.FirstName, Person.LastName
                        }
                 }
    


    Но выскакивает ошибка:
    Оператор foreach не работает с переменными типа "App1.Persons", поскольку "App1.Persons" не содержит открытого определения для "GetEnumerator".

    Подскажите что я делаю не так? может есть другой правильный метод?

    Заранее спасибо.

    • Перемещено Abolmasov Dmitry 27 января 2012 г. 11:11 (От:Языки программирования)
    29 декабря 2011 г. 12:07

Ответы

Все ответы

  • Правильный способ - это зависимости на уровне базы данных. Если их прописать, то модель генерится таким образом, что у Person автоматически появится поле Events, которое можно будет использовать.

    Касательно вашей проблемы - у вас для каждого эвента один Person, поэтому events.p - это один единственный объект Person, по нему не нужно итерироваться.

    29 декабря 2011 г. 13:07
  • А не могли бы вы более подробно объяснить про зависимости на уровне базы данных?

    Я в этом новечёк.

    29 декабря 2011 г. 14:11
  • http://stackoverflow.com/questions/1308339/create-a-one-to-many-relationship-using-sql-server

    http://msdn.microsoft.com/en-us/library/ms189049.aspx

    Правда я предпочитаю делать зависимости через диаграммы: создаете диаграмму, добавляете на неё две ваших таблицы и тащите id из одной к personid из другой, появляется окошко и выбираете какие поля связываются. Но это в SQL Server-е. У вас, возможно, используется другая база данных, там возможно будет отличаться способ.

    • Помечено в качестве ответа Roren 30 декабря 2011 г. 12:39
    30 декабря 2011 г. 7:02