创建一个新的匿名类型列表以联合到现有的匿名类型列表
我有一个从数据库中获取的匿名类型列表:
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′
这个答案可能有点晚了,但是因为这是我在谷歌搜索同样问题时发现的问题,我想我应该用一个有效的答案来完成它。
Union
在匿名类型上多次没有问题。 重要的是,所有属性都在所有实例中声明,并且它们具有相同的数据类型 。 如果没有,你会得到上面的错误。
- 在您的具体情况下,数据库是否可以将
TourStartDateTime
或TourEndDateTime
作为DateTime?
返回DateTime?
? -
RadioChannel
是数据库中的int?
还是int?
还是string
? -
TourArea
是数据库中的string
吗?
只要确保数据类型匹配,你就可以了。 下面是我在自己的程序中使用的代码片段:
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();
您只需Add
到列表:
takenChannels.Add(new { Start = ... });
- 如何使Moq忽略ref或out的参数
- 将西方阿拉伯数字“1,2,3 ……”中的数字转换为东部阿拉伯数字“1,2,3 ……”
- 如何以编程方式将“运行”分配给文本属性?
- 在ASP.NET MVC 3 Web App + Ninject + EF中为不同用户设置不同的连接字符串
- 在另一个线程执行任务时暂停线程
- TextBox LostFocus不会触发
- Microsoft.Threading.Tasks引用不正确的System.Threading.Tasks.dll版本
- 何时使用OrderByCompletion(Jon Skeet)和Parallel.ForEach与异步委托
- 将generics限制为可以为null的事物