【发布时间】:2015-02-25 09:24:53
【问题描述】:
我有以下疑问:
var userQuizzes = from quiz in Context.Quizzes
select new DashboardQuiz
{
QuizId = quiz.Id,
Questions = quiz.Questions
QuestionExcerpt = quiz.QuizVersion.Questions.FirstOrDefault().QuestionText
// etc...
}
这一切都很好,但是当模型被实例化时,是否可以调用我自己的方法对数据执行逻辑?
我的Quiz POCO 类IsQuizActive() 有一个方法,它根据Quiz 中的值确定测验是否处于活动状态。
例如:
var userQuizzes = from quiz in Context.Quizzes
select new DashboardQuiz
{
QuizId = quiz.Id,
Questions = quiz.Questions
QuestionExcerpt = quiz.QuizVersion.Questions.FirstOrDefault().QuestionText
// Custom method IsQuizActive() called here
ActiveQuiz = quiz.IsQuizActive()
}
我收到一条错误消息,提示它无法转换为 LINQ,这是可以理解的,但我创建了 DashboardQuiz 以用作我的视图模型。
就目前而言,我必须遍历我的对象并创建另一个模型DashboardQuizViewModel,它可以用作每个项目的视图模型:
var userQuizzes = from quiz in Context.Quizzes
select new DashboardQuiz
{
QuizId = quiz.Id,
Questions = quiz.Questions
QuestionExcerpt = quiz.QuizVersion.Questions.FirstOrDefault().QuestionText
// I'd like to call IsQuizActive() here
}
List<DashboardQuizViewModel> responseModel = new List<DashboardQuizViewModel();
foreach (var dashboardQuiz in userQuizzes)
{
DashboardQuizViewModel viewModel = new DashboardQuizViewModel();
viewModel.QuizId = dashboardQuiz .id;
viewModel.Questions = dashboardQuiz.Questions;
viewModel.QuestionExcerpt = dashboardQuiz.QuestionExcerpt;
// Call it here instead
viewModel.ActiveQuiz = dashboardQuiz.IsQuizActive();
responseModel.Add(viewModel);
}
return responseModel;
我能想到的唯一另一种“整洁”的方式是将IsQuizActive 作为我的视图模型上的吸气剂,并从视图中调用它。但我真的希望在将值传递给我的视图模型之前对其进行评估
【问题讨论】:
-
是的,您可以放置您的自定义逻辑,但您需要为此编写自定义模型定义的函数。参考这个链接msdn.microsoft.com/en-us/library/vstudio/…stackoverflow.com/questions/22352312/…
-
酷!模型定义的函数看起来像要走的路?用户定义的函数有什么缺点吗?
-
我认为我们可以使用带有 EDMFunctionattribute blogs.msdn.com/b/efdesign/archive/2008/10/08/… 的用户定义函数。
-
stackoverflow.com/a/9970181/4073386 基本上做同样的事情,但你可以节省一些代码编写。
-
哦,不...我刚刚意识到模型定义的函数首先不适用于代码,因为您在 EDMX 中定义它们...首先没有代码的 EDMX。 :(
标签: c# linq ef-code-first entity-framework-6