Выберите несколько таблиц, используя Linq to SQL - PullRequest
0 голосов
/ 04 октября 2010

Я пытаюсь привязать столбцы из двух разных таблиц к gridview, используя Linq To Sql

Вот привязка:

var q = (из o в mail.tblmails
присоединиться к c в mail.tblstaffs для o.staffId равно c.id
select new {o, c});
return View (q);

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

.Columns (колонки => {

       columns.Bound(o => o.dateAdded).Format("{0:MM/dd/yyyy}").Width(80);
       columns.Bound(o => o.companyId);
       //columns.Bound(c => c.staffId);
       columns.Bound(o => o.subject);
       columns.Bound(o => o.dateArchived);

   })

Я получаю ошибку

Сведения об исключении: System.InvalidOperationException: Элемент модели, передаваемый в словарь, имеет тип 'System.Data.Linq.DataQuery 1[<>f__AnonymousType0 6 [System.Nullable 1[System.DateTime],System.Nullable 1 [System.Int32], System.String, System.Nullable 1[System.DateTime],System.String,System.Int32]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [ffs.Models.tblmail] '.

У меня такое ощущение, что проблема может быть связана со строкой

<% Page Title = ""Language =" C # "MasterPageFile =" ~ / Views / Shared / Site.Master "Inherits =" System.Web.Mvc.ViewPage> "%>

, но я не уверен, что делать, чтобы исправитьэто.

Я использую расширение сетки Telerik.

Любая помощь будет отличной, спасибо.

Ответы [ 2 ]

3 голосов
/ 04 октября 2010

То, что вы делаете сейчас (и делаете неправильно), это отправка данных запроса непосредственно в представление.Это считается плохой практикой.Хотя возможно получить доступ к результирующему анонимному типу, этот метод будет вызывать доступ к данным во время просмотра, а не в контроллере.

Я рекомендую вам создать модель (класс) для представления данных и возвратасписок этих объектов (вашей модели) для представления, используя:

<% Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<List<yourCreatedModelClass>>"%>

Наблюдайте за той частью, где вы сообщаете представлению, что передаете ему список ваших объектов, а не просто чистый вид.

Обсуждается некоторая связанная проблема и решение здесь

2 голосов
/ 04 октября 2010

Я думаю, что проблема (глядя на ваше сообщение об ошибке) заключается в том, что вы пытаетесь передать анонимный тип, пока представление ожидает IEnumerable<tblmail>.

То, что вы хотите сделать, это создать структуру данных, такую ​​как:

public class Model
{
   public tblmails Mails { get; set; }
   public tblstaff Staff { get; set; }
}

Тогда в вашем запросе linq вы поместите o в Model.Mails, а затем поместите c в Model.Staff. Затем вы передаете свой IEnumerable<Model> результат в ваше представление и подключаете его так, чтобы он ожидал IEnumerable<Model> в качестве модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...