私にはわかりません。あなたが見ることができるように、ルール1のために、私はSiteOneとSiteTwoの両方を持っている辞書の問題:results.Read <NotificationRule>()。ToDictionary(ルール=> rule.Id)重複キーの状態
1 1 SiteOne
3 1 SiteOne
7 1 SiteOne
1 5 SiteTwo
次のセットを返します
SELECT sr.RuleId, s.Id, s.Name FROM Sites s
INNER JOIN NotificationSiteRules sr ON s.Id = sr.SiteID
WHERE sr.RuleId IN (
SELECT r.Id FROM NotificationRules r
INNER JOIN NotificationSiteRules sr ON r.Id = sr.RuleId
WHERE r.IsDeleted = 0 AND (@siteId IS NULL OR sr.SiteId = @siteId)
)
:
私はこのコードのビットを持っています。これは許可されなければならない。
NotificationRuleオブジェクトの定義は次のとおりです。
public class NotificationRule
{
public NotificationRule()
{
Sites = new List<Site>();
Recipients = new List<Recipient>();
}
public int? Id { get; set; }
public string Name { get; set; }
public List<Site> Sites { get; set; }
public List<Recipient> Recipients { get; set; }
}
だから、この定義では、実際には...各IDによって、私はサイトのリストを持つことができるべきであると述べています。しかし、私は
を取得していますSystem.ArgumentException: An item with the same key has already been added.
私は
var rules = results.Read<NotificationRule>().ToDictionary(rule => rule.Id);
義和を行います私は間違っているのですか?
申し訳ありませんが、私は達成しようとしていることについて私が明確ではなかったことを憂慮しているので、私は質問を編集しています。
私は期待していた最終的な結果は、この形式は次のとおりです。
に対応する{1, [1,5],[SiteOne, SiteTwo]}
:あなたが見ることができるように
{Key, List<Recipient>, list<Site>}
、この構築物中で、私は2つのキーを持っていませんすべてが同じ要素に終わるからです。
「辞書」の中でキーは一意でなければならない - あなたの例では「1」が3倍で表示されます – fubo
辞書にコンポジットキーを使用して一意にすることができます。多分RuleIDとIdのタプル? – itsme86
はい!あなたが[ドキュメントに従う](https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx#Anchor_8)、あなたは 'Dictionary'が重複を持つことができないことがわかりますこれが発生した場合は 'ArgumentException'をスローします。 –