gpt4 book ai didi

c# - 我可以在 Linq to SQL Query 中实例化对象时调用自己的方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:55 24 4
gpt4 key购买 nike

我有以下查询:

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 用作我的 View 模型。

按照目前的情况,我必须遍历我的对象并创建另一个模型 DashboardQuizViewModel,它可以用作每个项目的 View 模型:

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 作为我的 View 模型的 getter 并从 View 中调用它。但我真的希望在将值传递给我的 View 模型之前对其进行评估

最佳答案

如果不为 sql 创建模型定义的函数,则无法完成此操作,因为查询已转换为 SQL,并且默认情况下 SQL 不会将 IsQuizActive 识别为函数。您可以将逻辑放在查询中,但它非常不整洁且效率低下。你可以缩短你循环的方式。我认为这应该可行(调用 toList() 执行查询,因此如果您不想,则无需将其转换为不同的 View 模型):

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

关于c# - 我可以在 Linq to SQL Query 中实例化对象时调用自己的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28715315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com