2010-10-04 126 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>作为模型。