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;
});