2011-11-30 48 views
1
類型的模型項目

當我更改查詢時出現錯誤。能否請你幫忙?c#lambda表達式錯誤...此字典需要

public ActionResult Index(int? id) 
    { 
     Models.MyProjectEntities entity = new Models.MyProjectEntities(); 

     // NORMAL QUERY, NO PROBLEM 
     //var Messages = entity.Message.Where(x => x.Active); 

     // JOINED QUERY, GENERATES ERROR 
     var Messages = entity.Message.Join(entity.Categories, 
          m => m.CategoriID, 
          k => k.CategoriID, 
          (m, k) => new { Message = m, Categories = k }) 
          .Where(x => x.Message.Active); 


     return View(Messages); 
    } 

這裏是aspx文件第一行

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Models.Message>>" %> 

以下是錯誤

The model item passed into the dictionary is of type 'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType7`2[MyProject.Models.Message,MyProject.Models.Categories]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyProject.Models.Message]'. 

回答

2

你的觀點被聲明爲取一組Message秒。
你正試圖給它傳遞一組匿名類型。

由於錯誤明確指出,它不適合。

相反,您應該創建一個類來保存聯接中的數據,然後將視圖聲明爲獲取該類的集合。
(查看不能輕易使用匿名類型機型)

+0

so,please please ... :) –

0

因爲你加入一個你創建一個匿名類型,你需要做的

var Messages = entity.Message.Join(entity.Categories, 
    m => m.CategoriID, 
    k => k.CategoriID, 
    (m, k) => new { Message = m, Categories = k }) 
    .Where(x => x.Message.Active) 
    .Select(x => new Message { ... .. .. }); 
+0

不需要創建新消息 – maxlego

+0

。選擇(x => new MyProject.Models.Message {} ); –

0
public ActionResult Index(int? id) 
{ 
    Models.MyProjectEntities entity = new Models.MyProjectEntities(); 

    // NORMAL QUERY, NO PROBLEM 
    //var Messages = entity.Message.Where(x => x.Active); 

    // JOINED QUERY, GENERATES ERROR 
    var Messages = entity.Message.Join(entity.Categories, 
         m => m.CategoriID, 
         k => k.CategoriID, 
         (m, k) => new { Message = m, Categories = k }) 
         .Where(x => x.Message.Active) 
         .Select(x => x.Message); 


    return View(Messages); 
} 

,或者如果你需要的類別爲好,你應該改變視圖模型類型

編輯:

public ActionResult Index(int? id) 
{ 
    Models.MyProjectEntities entity = new Models.MyProjectEntities(); 

    // NORMAL QUERY, NO PROBLEM 
    //var Messages = entity.Message.Where(x => x.Active); 

    // JOINED QUERY, GENERATES ERROR 
    var Messages = entity.Message.Join(entity.Categories, 
         m => m.CategoriID, 
         k => k.CategoriID, 
         (m, k) => new MessageWithCategories { Message = m, Categories = k }) 
         .Where(x => x.Message.Active); 


    return View(Messages); 
} 

和模型類型應該是MessageWithCategories(這個類必須被創建)

+0

好吧,我得到了它的感謝 –

+0

但我需要他們在同一視圖中同時 –

+0

intellisense給MessageWithCategories –