0
私は自分のSQLを実行し、集計ラベルを含むContactListsのいくつかの行を返すget Dataというメソッドを持っています。このメソッドが自分のコードの背後にあり、別のデータアクセスクラス。私はあなたの援助に感謝します。ありがとう!WPFコードのリファクタリング
私は自分のSQLを実行し、集計ラベルを含むContactListsのいくつかの行を返すget Dataというメソッドを持っています。このメソッドが自分のコードの背後にあり、別のデータアクセスクラス。私はあなたの援助に感謝します。ありがとう!WPFコードのリファクタリング
は、私はあなたのコードを理解していれば、あなたはContactListの初期化後にこの操作を行うには、正常です:各ContactListに対して
contactList.Labels = new ObservableCollection<Label>()
{
new Label() {
Name = dr["LABEL_NAME"].ToString(),
Count = Convert.ToInt32(dr["LABEL_COUNT"])
}
};
、常に1つの項目を追加し、あなたがこのようなものでしょう:
contactList.Labels = new ObservableCollection<Label>();
foreach(var item in <yourLabelDataSource>)
contactList.Labels.Add(new Label(...));
を
ソリューションは次のようなものです:
Dictionary<int, ContactList> myContactDictionary = new Dictionary<int, ContactList>();
using (DB2DataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
int id = Convert.ToInt32(dr["CONTACT_LIST_ID"]);
if (!myContactDictionary.ContainsKey(id))
{
ContactList contactList = new ContactList();
contactList.ContactListID = id;
contactList.ContactListName = dr["CONTACT_LIST_NAME"].ToString();
contactList.Labels = new ObservableCollection<Label>()
{
new Label()
{
Name = dr["LABEL_NAME"].ToString(),
Count = Convert.ToInt32(dr["LABEL_COUNT"])
}
};
myContactDictionary.Add(id, contactList);
}
else
{
//Add new label because CONTACT_LIST_ID Exists
ContactList contactList = myContactDictionary[id];
contactList.Labels.Add(
new Label()
{
Name = dr["LABEL_NAME"].ToString(),
Count = Convert.ToInt32(dr["LABEL_COUNT"])
}
);
}
}
}
ベン最後の質問では、彼の解決策:
else
{
//Add new label because CONTACT_LIST_ID Exists
ContactList contactList = myContactDictionary[id];
string name = dr["LABEL_NAME"].ToString();
var label = contactList.Labels.Where(l => l.Name == name).FirstOrDefault();
if(label != null)
label.Count += Convert.ToInt32(dr["LABEL_COUNT"]);
else
{
contactList.Labels.Add(
new Label()
{
Name = dr["LABEL_NAME"].ToString(),
Count = Convert.ToInt32(dr["LABEL_COUNT"])
}
);
}
私はこのコードが読みやすく役立つことを望みます! }
これは、他の応答である:
あなたに必要なデータを含めることができるモデルを作成し、オブジェクト:
public class DataResult
{
public ObservableCollection<AggregatedLabel> AggregatedLabels { get; set; }
public ObservableCollection<ContactList> ContactLists { get; set; }
}
少し例:私はそれが
おかげRobyの概念的明らかであると思います
、私はあなたが私たちが必要とする私に – Ben
ベンを支援することができ、最後の行に置くことはよく分かりませんデータソース、SqlDataReaderの結果の構造について何かを知るためには、私はあなたを助けることができます! –
したがって、私が上記で提供したコードは、ContactListオブジェクトを辞書に追加します。その後、ObservableCollection of ContactListsにすべてのオブジェクトを追加しますが、現時点では、各ContactListの最初のラベルのみが取得されます。 – Ben