C# 在Linq to SQL查询中实例化对象时,我可以调用自己的方法吗?
我有以下疑问:C# 在Linq to SQL查询中实例化对象时,我可以调用自己的方法吗?,c#,linq,ef-code-first,entity-framework-6,C#,Linq,Ef Code First,Entity Framework 6,我有以下疑问: var userQuizzes = from quiz in Context.Quizzes select new DashboardQuiz { QuizId = quiz.Id, Questions = quiz.Questions QuestionExcerpt = qui
var userQuizzes = from quiz in Context.Quizzes
select new DashboardQuiz
{
QuizId = quiz.Id,
Questions = quiz.Questions
QuestionExcerpt = quiz.QuizVersion.Questions.FirstOrDefault().QuestionText
// etc...
}
这很好,但是在实例化模型时,是否可以调用我自己的方法来对数据执行逻辑
我的quick
POCO类IsQuizActive()
上有一个方法,它根据quick
中的值确定测验是否处于活动状态
例如:
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,这是可以理解的,但我创建了仪表板测验
用作我的视图模型
目前,我必须在对象中循环并创建另一个模型仪表板quizviewmodel
,该模型可用作每个项目的视图模型:
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;
var userQuizzes=来自上下文中的测验。测验
选择新仪表板测试
{
QuizId=quick.Id,
问题=测验
QuestionExtrapt=quick.QuizVersion.Questions.FirstOrDefault().QuestionText
//我想在这里调用IsQuizActive()
}
List responseModel=new List如果不为sql创建模型定义的函数,则无法执行此操作,因为查询已转换为sql,并且默认情况下sql不会将ISQUIZAACTIVE识别为函数。您可以将逻辑放入查询中,但它非常不整洁且效率低下。你可以缩短你的循环方式。我认为这应该是可行的(调用toList()执行查询,因此,如果不想,不需要将其转换为其他视图模型):
是的,您可以设置自定义逻辑,但需要为此编写自定义模型定义的函数。参考这个链接酷!模型定义的函数看起来像是要走的路?用户定义的函数有什么缺点吗?我认为我们可以使用带有EDMFunctionattribute的用户定义函数。基本上做同样的事情,但你可以节省一些代码编写。。。我刚刚意识到模型定义的函数并不首先适用于代码,因为您在EDMX中定义了它们。。。没有用于“代码优先”的EDMX:(感谢您提供了更简洁的循环版本。我现在就讲这个,因为我不能先在代码中完成模型定义的函数。
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
}
var newUserQuizzes = userQuizzes.ToList().Select(x => {
x.ActiveQuiz = x.IsQuizActive();
return x;
});