创建一个新的匿名类型列表以联合到现有的匿名类型列表

时间:2013-06-05 19:00:57

标签: c# sql linq

我有一个从数据库中获取的匿名类型列表:

var takenChannels = (from b in bq.GetStuff(db)
                     where b.RecordType == "H" && b.TourStartDateTime.Date == date
                     select new { Start = b.TourStartDateTime, End = b.TourEndDateTime, Channel = b.RadioChannel, TourArea = b.TourArea }).ToList();

然后我使用这个列表信息在foreach循环中做一些事情。我想在这个列表中添加一个新的匿名项目,当我回到循环中时。

类似的东西:

takenChannels.Union{new[] { new{Start = DateTime.Now, End = DateTime.Now.AddDays(1), Channel = 25, TourArea = "Area" }});

显然这不起作用。我该怎么做?

修改1:

takenChannels.Add(new { Start = s, End = e, Channel = channel, TourArea = booking.TourArea });

这是我到目前为止最接近的(感谢Daniel)......但我得到的错误是:

  

错误6参数1:无法从'AnonymousType#2'转换为'AnonymousType#1'

2 个答案:

答案 0 :(得分:11)

这个答案可能有点迟了,但由于这是我在搜索同一问题时发现的问题,我想我应该用一个有效的答案来完成它。

Union多次在匿名类型上没有问题。重要的是,所有属性都在所有实例中声明,并且它们具有相同的数据类型。如果没有,你会得到上面的错误。

  • 在您的具体情况下,数据库是否可以将TourStartDateTimeTourEndDateTime作为DateTime?返回?
  • RadioChannelint来自数据库,还是int?string
  • 数据库中TourAreastring吗?

确保数据类型匹配,您应该没问题。下面是我在自己的程序中使用的一段代码:

var regions = (
    new[] { new { Id = "-1", Name = "---", Pattern = (string)null } }
  ).Union(
    from x in db.Userlists where x.ListType == 2 select new { Id = x.UserlistID.ToString(), Name = x.Name, Pattern = (string)null }
  ).Union(
    from x in db.Lookups where x.Category == "Stock" select new { Id = x.Key, Name = x.Key, Pattern = x.Value }
  ).ToArray();

答案 1 :(得分:3)

您只需Add到列表中:

takenChannels.Add(new { Start = ... });