簡體   English   中英

ASP.NET MVC2:來自join的IQueryable

[英]ASP.NET MVC2: IQueryable from join

在我的控制器類中,我必須連接兩個表:

var query = from logger in database.LOGGERs
                        join testcase in database.TESTCASEs on logger.TCID equals testcase.TCID select new {logger, testcase};

在視圖中我試圖調用值,例如:

 <% foreach (var testCase in Model.SearchResults)

     <td width="200"title="<%= (testCase.SCRIPTNAME %>"

這導致錯誤:

Unable to cast object of type '<>f__AnonymousType1`2[TestAutomationService.Models.LOGGER,TestAutomationService.Models.TESTCASE]' to type 'TestAutomationService.Models.LOGGER'.

那么我需要聲明而不是var才能訪問匿名類型? 我嘗試過使用LOGGER,但它顯然不能讓我訪問TESTCASE。

我正在尋找類似的東西:

foreach (IQuerable<{LOGGER, TESTCASE}> testCase in Model.SearchResults) 
...

這是匿名類型的缺點。 一旦您超出了創建它的范圍,就沒有一種簡單的方法可以在不使用反射的情況下訪問其成員。

我的建議是創建另一個具有視圖所需信息的類(視圖模型),並用查詢結果填充它。 這樣您就可以訪問所有內容,因為您使用的類型不再是匿名類型。

我甚至不知道你是否應該在控制器內做Linq。 是的,我知道大多數樣本都表明,但這不是好習慣。

但是,要解決您的問題,您必須創建一個數據傳輸對象。 就像是:

class LoggerTestcase {
    public Logger Logger {get;set;}
    public Testcase Testcase {get;set;}
}

var query = from logger in database.LOGGERs
    join testcase in database.TESTCASEs on logger.TCID equals 
    testcase.TCID select new LoggerTestcase {Logger = logger, Testcase = testcase};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM