下面的代碼是我現在有的並且工作正常。我覺得我可以在Linq而不是C#代碼中完成更多的工作。C#Linq代碼重構
有沒有人可以用更多的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對象然後像設置Status屬性在foreach循環的這樣
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 [?]集合中的一個項目。
是我的數據庫架構和業務對象模式 alt text http://i41.tinypic.com/1051n28.png alt text http://i43.tinypic.com/awua2v.png
鏈接是C#。不知道你爲什麼這麼做 – Surya 2009-04-23 23:51:48