2010-10-04 4 views
0

Я пытаюсь связать столбцы из двух разных таблиц, чтобы GridView, используя Linq To SqlВыберите несколько таблиц с помощью Linq для SQL

Вот обязывать:

вар д = (от о в mail.tblmails
join c in mail.tblstaffs on o.staffId равно c.id
выбрать новый {o, c});
возвращение Вид (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].

у меня есть ощущение, что ИСС ue может иметь какое-то отношение к строке

<% Название страницы = "" Язык = "C#" MasterPageFile = "~/Views/Shared/Site.Master" Inherits = "System.Web.Mvc.ViewPage>" %>

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

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

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

ответ

3

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

То, что я рекомендую вам сделать модель (класс) для представления данных и возвращает список этих лиц (ваша модель) в целях использования:

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

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

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

2

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

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

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

Затем в Linq запрос вы бы положить в о Model.Mails, а затем положить гр в Model.Staff. Затем вы передаете свой результат IEnumerable<Model> на ваш взгляд и зацепите его, поэтому он ожидает IEnumerable<Model> в качестве модели.

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