传递到字典中的模型项的类型为'Entity.Infrastructure.DbQuery`1 [N]',但此字典需要类型为'N'

时间:2017-03-23 12:16:08

标签: c# asp.net-mvc linq

var model = from m in db.Customers
            orderby m.a descending
            select new Get_Complaint_Form_Sub
            {
                CustomerFullName = m.a,
                Email = m.Email_Address,
                PhoneNumber = m.Telephone_No
            };

我正在使用此LINQ查询来检索db中的选定列。它以降序

获取表中的最后一条记录

2 个答案:

答案 0 :(得分:0)

听起来这里的问题是下游,即消费模型。特别是,它听起来像是期待一个 N,而不是对它们的查询。所以...您可能希望在查询中添加.SingleOrDefault().FirstOrDefault().Single().First()(具体取决于您的意图)。例如:

var query = from m in db.Customers
        orderby m.a descending
        select new Get_Complaint_Form_Sub
        {
            CustomerFullName = m.a,
            Email = m.Email_Address,
            PhoneNumber = m.Telephone_No
        };
var model = query.FirstOrDefault();

更一般的说明:IQueryable<T> 通常是待处理的查询 - 它尚未执行。大多数时候,你在谈论模型,你想要谈论严格的数据;因此,如果您尝试表示某些 N,则应该使用.ToList().ToArray()来评估查询并填充列表/数组。< / p>

答案 1 :(得分:0)

作为suggested by Marc,问题不在于您的Linq查询,而在于您的MVC视图。您发布的错误消息告诉您,您的视图(即您的.cshtml文件)期望一种类型,但您将另一种类型传递给它。看起来你犯了传递枚举值而不是单个值的常见错误。您的解决方案是:

  • 使用Single(),`First()等
  • 将单个值传递给您的视图
  • 修复视图,使IEnumerable<T>代替T,并更新代码以便相应地处理。