在我的控制器类中,我必须加入两个表:
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)
...
答案 0 :(得分:4)
这是匿名类型的缺点。一旦您超出了创建它的范围,就不会有一种简单的方法来访问其成员而不使用反射。
我的建议是创建另一个具有视图所需信息的类(视图模型),并用查询结果填充它。这样您就可以访问所有内容,因为您使用的类型不再是匿名类型。
答案 1 :(得分:0)
我甚至不知道你是否应该在控制器内做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};