以下のコードは私が現在持っているもので、うまく動作します。私は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;
}
}
は、ここで私は私のマッパーfuncitonはそうのような質問の状態をマップするビズオブジェクト
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
};
}
?問題は、この関数はステータスを取得する調査を知らないためです。代わりそう
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>
をフィルタリングしたいようなforeachループでStatusプロパティを設定次いでBIZオブジェクトを作成する
、そのような存在であろうとq.Survey_Questions [?]コレクション内のアイテムは1つだけです。以下
は私のデータベーススキーマとビジネス・オブジェクト・スキーマ alt text http://i41.tinypic.com/1051n28.png alt text http://i43.tinypic.com/awua2v.png
リンク私のマッパー関数をオーバーロードするC#のです。なぜあなたがその区別をしているのか分かりません – Surya