如何使用LINQ创建新的结果表?

时间:2014-11-26 15:59:53

标签: c# .net linq

总结一下我的情况:我有一个具有日期属性的事件的集合。我需要创建一个新表,基本上列出特定日期的事件数。

所以假设我有一系列的记录如下:

enter image description here

我想要做的是能够使用LINQ创建一个新表,选择日期,然后选择该日期的事件计数,如下所示:

enter image description here

我不确定从哪里开始创建此声明。我想知道是否有人能指出我正确的方向?

由于

编辑:道歉 - 似乎我有点困惑!我实际上正在使用NHibernate,并且我有一个语句,它返回所有日期的所有事件的集合。

我现在意识到我可以迭代集合并构建一个包含我需要的数据的新类集合: - )

2 个答案:

答案 0 :(得分:1)

LINQ仅用于查询数据集/集合,您无法使用它创建表或任何其他数据库对象。 如果您需要迟早动态创建数据库表,您最终会直接向DB发送sql命令,如果使用linq-to-sql或EF,则无法轻松查询这些表(使用生成的模式)码)。 我会做什么,我会编写存储过程,一个用于创建结果表,第二个用于向其插入数据(它包含大量数据,使用批量插入)和第三个用于读取数据(如果你需要的话)。在EF中,您可以将存储过程映射到方法,因此它的结构比#34; CREATE TABLE" + tableName +" ...."等直接在代码中。您仍然需要将表名作为参数传递,但如果您想要处理实际上将成为无架构数据库的内容,那将是显而易见的。 您可能需要考虑的其他选项: 1.转向nosql 2.将所有结果保存在一个signle表中,并添加一个保存表名的列 3.将结果序列化为某种XML并将整个结果XML作为键值表的条目插入,其中键是表名。

这一切都归结为您将在表中存储多少数据以及是否需要更新它。

答案 1 :(得分:1)

嗯,你唯一需要做的就是参加GroupBy日期。

这是一个例子:

    /// <summary>
    /// Your entity
    /// </summary>
    public class Events
    {
        public int EventID { get; private set; }
        public string Name { get; set; }
        public DateTime EventDate { get; set; }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            // Query all events
            IEnumerable<Events> events = null; 

            // Group them by Date
            events
                .GroupBy(e => e.EventDate)
                .Select(g => new
                {
                    Date = g.Key,
                    Count = g.Count()
                });
        }
    }