我有一個輕微的問題,我似乎不明白。字典問題:results.Read <NotificationRule>()。ToDictionary(rule => rule.Id)表示複製密鑰
我有這段代碼:
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)
)
返回下面的一組:
1 1 SiteOne
3 1 SiteOne
7 1 SiteOne
1 5 SiteTwo
正如你所看到的,對於規則1我都SiteOne和SiteTwo。這必須被允許。
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>}
正如你所看到的,在這個結構我不會有兩個鍵,因爲所有結果都是相同的元素。
「Dictionary」中的鍵必須是唯一的 - 「1」在您的示例中顯示爲3x – fubo
您可以使用字典的組合鍵使其唯一。也許是RuleID和Id的元組? – itsme86
是的!如果你[按照文檔](https://msdn.microsoft.com/en-us/library/xfhwa508(v = vs.110).aspx#Anchor_8),你會發現'Dictionary'不能有重複如果發生這種情況,將會拋出一個'ArgumentException'。 –