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

标签 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)...但我得到的错误是:

Error 6 Argument 1: cannot convert from 'AnonymousType#2' to 'AnonymousType#1'

最佳答案

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

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

  • 在您的特定情况下,数据库是否可能将 TourStartDateTimeTourEndDateTime 作为 DateTime? 返回?
  • RadioChannel 是来自数据库的 int 还是 int?string
  • TourArea 是数据库中的字符串吗?

只要确保数据类型匹配就可以了。下面是我在自己的程序中使用的代码片段:

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();

关于c# - 创建一个新的匿名类型列表以联合到现有的匿名类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947761/

相关文章:

c# - EPPlus 配方评估

c# - 通过 C# 构建基于 Windows 的客户端/服务器应用程序

c# - 如何在 ASP.NET 中找到选定的 RadioButton 的值?

c# - 向字符串添加回车符

c# - 对多重继承感到困惑

c# - 使用命名管道将图像从 C++ 发送到 C# 应用程序

c# - 从两列结果集创建图表

sql - 将 SQLite 语句移植到 Firebird

php mysql_insert_id 在多行上?

c# - LINQ 内连接