2010-10-04 123 views
0

我試圖從兩個不同的表列綁定中使用LINQ的GridView到SQL使用LINQ to SQL

這裏選擇多個表的綁定:

變種Q =(鄰在mail.tblmails
加入c mail.tblstaffs on o.staffId等於c.id
選擇新{o,c});
return查看(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]」。

我有一種感覺,ISS可能與該行有關

<%Page Title =「」Language =「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>作爲模型。