通过c#</int?>中的结果集在group上动态添加IEnumerable <int?>

时间:2014-05-27 09:01:43

标签: c# c#-4.0 linq-to-sql c#-3.0

有人建议我弄清楚这个要求。

var enableIds = context.items.Where(tble => tble.Date == null)
                         .GroupBy(a => a.Id)
                         .Select(g => new
        {
            Id = g.Key,
            EId = g.Select(c => c.EId).Distinct()
        });

对于上述查询,我​​的结果集低于结果

“ID \”:1,\ “EID \”:[1,2]

现在我要像这样动态地向EId添加-1值(“EId \”:[1,2,-1])

2 个答案:

答案 0 :(得分:0)

我会尝试使用辅助方法Concat<T>来做这样的事情。辅助方法可以作为IEnumerable<T>的扩展方法实现。

var enableIds = _db.items.Where(tble => tble.Date == null)
                         .GroupBy(a => a.Id)
                         .Select(g => new 
      { 
          Id = g.Key, 
          EId = Concat(g.Select(c => c.EId).Distinct(), -1) 
      });


        public static IEnumerable<T> Concat<T>(IEnumerable<T> enumerable, params T[] enumerable2)
        {
            if (enumerable == null) throw new ArgumentNullException("enumerable");
            if (enumerable2 == null) throw new ArgumentNullException("enumerable2");

            foreach (T t in enumerable)
            {
                yield return t;
            }

            foreach (T t in enumerable2)
            {
                yield return t;
            }
        }

答案 1 :(得分:0)

您可以使用Enumerable Concat扩展程序:

 var enableIds = context.items.Where(tble => tble.Date == null)
                     .GroupBy(a => a.Id)
                     .Select(g => new
    {
        Id = g.Key,
        EId = g.Select(c => c.EId).Distinct()).ToList().Concat(new[] { -1 })
    });