我正在尝试使用Linq To Sql将来自两个不同表的列绑定到gridview
这是绑定:
var q =(来自mail.tblmails中的o
在o.staffId上的mail.tblstaffs中加入c等于c.id
选择新的{o,c});
return view(q);
这是我在我的视图中调用绑定的地方。
.Columns(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]”。
我觉得这个问题可能与行
有关&LT; %Page Title =“”Language =“C#”MasterPageFile =“〜/ Views / Shared / Site.Master”Inherits =“System.Web.Mvc.ViewPage&gt;”%&gt;
但我不知道该怎么做才能修复它。
我正在使用telerik网格扩展。
任何帮助都会很棒,谢谢。
答案 0 :(得分:3)
您现在正在做的事情(也做错了)是将查询数据直接发送到视图。这被认为是不好的做法。虽然可以访问生成的匿名类型,但此方法将导致在视图期间而不是在控制器中进行数据访问。
我建议您创建一个模型(类)来表示数据,并使用以下命令将这些实体(您的模型)的列表返回给视图:
<% Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<List<yourCreatedModelClass>>"%>
观察您告诉视图的部分,您正在处理一个对象列表,而不仅仅是一个干净的视图。
讨论了一些相关问题和解决方案here
答案 1 :(得分:2)
我认为问题(查看您的错误消息)在于您在视图期待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>
作为模型。