首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典问题: results.Read<NotificationRule>().ToDictionary(rule => rule.Id)

字典问题: results.Read<NotificationRule>().ToDictionary(rule => rule.Id)
EN

Stack Overflow用户
提问于 2017-02-09 16:05:46
回答 3查看 46关注 0票数 1

我有点小问题,我似乎不明白。

我有一个代码:

代码语言:javascript
复制
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)
)

它返回以下集合:

代码语言:javascript
复制
1   1   SiteOne
3   1   SiteOne
7   1   SiteOne
1   5   SiteTwo

如您所见,对于规则1,我有SiteOne和SiteTwo。必须允许这样做。

NotificationRule对象的定义是:

代码语言:javascript
复制
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,我应该能够有一个网站列表.但我得到了

代码语言:javascript
复制
System.ArgumentException: An item with the same key has already been added.

当我这么做

代码语言:javascript
复制
var rules = results.Read<NotificationRule>().ToDictionary(rule => rule.Id);

我做错了什么?

对不起,我正在编辑这个问题,因为我不清楚我想要达到什么目的。

我希望的最终结果是这种形式:

代码语言:javascript
复制
{1, [1,5],[SiteOne, SiteTwo]}

它对应于:

代码语言:javascript
复制
{Key, List<Recipient>, list<Site>}

正如您所看到的,在这个构造中,我不会有两个键,因为所有的键都在同一个元素中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-13 10:07:55

实际上,我刚刚发现问题不在那小部分代码中,而是处理好了。问题是@siteId是空的,然后在前面的查询中得到重复的。我要结束这个问题,因为这个问题现在还没有定论;我需要找到一种方法来修复以前的查询,以获得正确的值……或者一种处理空值的方法。谢谢大家的帮助!

票数 0
EN

Stack Overflow用户

发布于 2017-02-09 16:19:20

听起来你可能想做一个小组,而不是创建一本字典。

var rules = results.Read<NotificationRule>().GroupBy(k => rule.Id);这将按rule.Id对规则进行分组

或者,如果您只是想获得特定规则的站点,则可以执行var siteId = 1; var sites = results.Read<NotificationRule>().Where(r => r.Id == siteId);

票数 1
EN

Stack Overflow用户

发布于 2017-02-09 16:19:34

只要集合results中的对象在字段中没有唯一值,Id,您就必须在将其放入字典之前对结果进行分组。

代码语言:javascript
复制
results.Read<NotificationRule>()
  .GroupBy(rule=>rule.Id).ToDictionary(group => group.Key, group=>group.ToArray());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42141436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档