2013-04-29 4 views
0

Я пытаюсь передать данные из моей основной таблицы (Users) и связанной таблицы (Posts) в представление, однако, когда я нахожусь в представлении, я не могу получить доступ к любому из связанных табличных данных. Я использую модель, созданную с использованием linq 2 sql, и я использую метод LoadWith для включения данных из связанной таблицы.DataLoadOptions не загружает связанную таблицу

Вот код в ActionResult:

BlogModelDataContext context = new BlogModelDataContext(); 

DataLoadOptions dlo = new DataLoadOptions(); 
dlo.LoadWith<UserModel>(c => c.PostModels); 
context.LoadOptions = dlo; 

var users = from u in context.UserModels 
         where u.UserId == WebSecurity.CurrentUserId 
         select u; 

return View(users); 

Вот код в ActionResults просмотра:

@model IEnumerable<MvcBlog.Models.UserModel> 

@{ 
    ViewBag.Title = "NewProfile"; 
} 

<h2>NewProfile</h2> 

@foreach (var item in Model) 
{ 
    @item.JoinDate 
    @item.Username 

    @foreach (var post in item.PostModels) 
    { 
     @post. 
    } 
} 

Однако, когда я пытаюсь получить доступ к полям почтовой таблицы, ничего , и я получаю следующее предупреждение:

Ошибка 2 оператор foreach не может работать с переменными типа
«System.Data.Linq.EntitySet», потому что «System.Data.Linq.EntitySet» не содержит публичное определение «GetEnumerator»

Я думал, когда я использую LoadWith я должен быть в состоянии доступ к свойствам таблицы Post. Любая помощь будет принята с благодарностью.

ответ

1

Будьте осторожны при использовании Linq и особенно IEnumerable. Ваш текущий оператор select возвращает объект IEnumerable. Это означает, что оператор linq фактически не выполняется до тех пор, пока вы не начнете выполнять итерацию над объектом IEnumerable (т. Е. В вашем представлении). Добавляя .ToList(), на самом деле вынуждает вычислять это перечисление в этой точке.

Затем вы передадите в свой список список UserModels с их PostModels.

Подводя итог, добавьте .ToList() в свой оператор linq.

var users = (from u in context.UserModels 
      where u.UserId == WebSecurity.CurrentUserId 
      select u).ToList(); 
+0

Привет, Дэвид, я добавил ToList(), как вы сказали, однако я не могу получить доступ к свойствам из таблицы PostModels. – gb1986

+0

Убедитесь, что в Linq есть определенная ссылка между UserModels и PostModels. Откройте файл dbml и дважды проверьте ссылку. Попробуйте удалить из dbml и повторно добавить. – David

+0

Привет, Дэвид, я проверил dmbl, и есть отношения между UserModel и PostModel. Я удалил dbml и создал новый на всякий случай, и у меня все еще проблема. Правильно ли это заявление модели? @model IEnumerable gb1986

Смежные вопросы