无法使用Linq从数据库表中选择记录并进行分组

时间:2015-05-26 17:06:02

标签: c# linq

我试图选择一个SQL表,并使用Linq to SQL,Entities或Object对列进行分组(我真的不知道是什么。)我对Linq有点新意,可以使用一些帮助。在我看来,代码结构是直截了当的。当我没有添加GroupBy方法时,它工作正常。顺便说一句,JT_Temp是一个实体模型。当我在下面运行我的代码时,它会转到例外:

实体或复杂类型' JT_Temp'无法在LINQ to Entities查询中构造。

我已经尝试了this和各种stackoverflow解决方案,但它们似乎无法解决并适用于我的案例。

这是我目前的代码:

//Goal:
 //SELECT EnvelopeCode, Branch_COA, AQ_COA, AQ_Branch, SUM(Amount), AQ_PostStatus FROM JT_Temp
            //GROUP BY EnvelopeCode, Branch_COA, AQ_COA, AQ_Branch, AQ_PostStatus

//var csvFilteredRecord = Context.JT_Temp.SqlQuery("SELECT * FROM JT_Temp").ToList<JT_Temp>(); 
// GROUP BY -- No go; Manual SELECT -- No go;

            try
            {


                var csvFilteredRecord = (
                    from c in Context.JT_Temp
                    group c by new
                    {
                        c.EnvelopeCode,
                        c.Branch_COA,
                        c.AQ_COA,
                        c.AQ_Branch,
                        c.AQ_PostStatus
                    } into i
                    select new JT_Temp
                    {
                        EnvelopeCode = i.Key.EnvelopeCode,
                        Branch_COA = i.Key.Branch_COA,
                        AQ_COA = i.Key.AQ_COA,
                        AQ_Branch = i.Key.AQ_Branch,
                        //TO-DO SUM(Amount),
                        AQ_PostStatus = i.Key.AQ_PostStatus
                    }).ToList();

                foreach (var Record in csvFilteredRecord)
                {
                    Console.WriteLine(
                            Record.EnvelopeCode
                            + Record.Branch_COA
                            + Record.AQ_COA
                            //+ Record.Amount
                            + Record.AQ_PostStatus
                        );
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("---------- " + e.Message);
                Console.ReadLine();

            }

1 个答案:

答案 0 :(得分:1)

您无法投影到JT_Temp。只需使用匿名对象。此外,没有理由将其作为列表,所以我删除了boot2docker ssh 查询语法:

.ToList()

方法语法:

var csvFilteredRecord = (
                from c in Context.JT_Temp
                group c by new
                {
                    c.EnvelopeCode,
                    c.Branch_COA,
                    c.AQ_COA,
                    c.AQ_Branch,
                    c.AQ_PostStatus
                } into i
                select new 
                {
                    EnvelopeCode = i.Key.EnvelopeCode,
                    Branch_COA = i.Key.Branch_COA,
                    AQ_COA = i.Key.AQ_COA,
                    AQ_Branch = i.Key.AQ_Branch,
                    //TO-DO SUM(Amount),
                    AQ_PostStatus = i.Key.AQ_PostStatus
                });