【发布时间】:2009-04-23 23:38:59
【问题描述】:
下面的代码是我目前拥有的并且工作正常。我觉得我可以在 Linq 而不是 C# 代码中做更多我正在做的工作。
有没有人可以用更多的 Linq 代码和更少的 C# 代码来完成相同的结果。
public List<Model.Question> GetSurveyQuestions(string type, int typeID)
{
using (eMTADataContext db = DataContextFactory.CreateContext())
{
List<Model.Question> questions = new List<Model.Question>();
List<Linq.Survey_Question> survey_questions;
List<Linq.Survey> surveys = db.Surveys
.Where(s => s.Type.Equals(type) && s.Type_ID.Equals(typeID))
.ToList();
if (surveys.Count > 0)
{
survey_questions = db.Survey_Questions
.Where(sq => sq.Survey_ID == surveys[0].ID).ToList();
foreach (Linq.Survey_Question sq in survey_questions)
{
Model.Question q = Mapper.ToBusinessObject(sq.Question);
q.Status = sq.Status;
questions.Add(q);
}
}
else
{
questions = null;
}
return questions;
}
}
这是我从实体到业务对象的映射器函数
internal static Model.Question ToBusinessObject(Linq.Question q)
{
return new Model.Question
{
ID = q.ID,
Name = q.Name,
Text = q.Text,
Choices = ToBusinessObject(q.Question_Choices.ToList())
};
}
我希望我的映射器功能像这样映射问题状态。
internal static Model.Question ToBusinessObject(Linq.Question q)
{
return new Model.Question
{
ID = q.ID,
Name = q.Name,
Text = q.Text,
Choices = ToBusinessObject(q.Question_Choices.ToList()),
Status = q.Survey_Questions[?].Status
};
}
?问题是这个函数不知道从哪个调查中提取状态。
而不是创建 biz 对象,然后像这样在 foreach 循环中设置 Status 属性
foreach (Linq.Survey_Question sq in survey_questions)
{
Model.Question q = Mapper.ToBusinessObject(sq.Question);
q.Status = sq.Status;
questions.Add(q);
}
我想在调用方法中以某种方式过滤上面 q 对象中的EntitySet<Survey_Question>,这样 q.Survey_Questions[?] 集合中只有一项。
【问题讨论】:
-
链接是 C#。不知道你为什么要区分
标签: c# linq refactoring