C# 林奇;ORA-00933:SQL命令未正确结束“;错误

C# 林奇;ORA-00933:SQL命令未正确结束“;错误,c#,linq,oracle11g,C#,Linq,Oracle11g,下面的LINQ语句不喜欢我的.ToList()方法。我在其他LINQ语句中使用过这个,但在GROUPBY语句中没有使用。删除.ToList()方法后,代码在LINQPad中运行良好。那么,有人知道我为什么会出现上述Oracle错误吗?我使用C#得到这个错误。甲骨文11g var result = (from d in db.SLSPERDTs group d by new { d.YR, d.PERNUM } into g select g

下面的LINQ语句不喜欢我的
.ToList()
方法。我在其他LINQ语句中使用过这个,但在GROUPBY语句中没有使用。删除
.ToList()
方法后,代码在LINQPad中运行良好。那么,有人知道我为什么会出现上述Oracle错误吗?我使用C#得到这个错误。甲骨文11g

var result = (from d in db.SLSPERDTs
              group d by new { d.YR, d.PERNUM } into g
              select g.First()).ToList();

从这个Oracle表中,我只是尝试按
YR
&
PERNUM
列进行分组,我只想要每组的第一行。

这可能发生,因为您选择的是
g.FIRST()
,并且始终是一个对象或空(我认为)。试试这个:

var result = (from d in db.SLSPERDTs
      group d by new { d.YR, d.PERNUM } into g
      select g.FirstOrDefault()).ToList();

在网络上进行了一些研究之后,下面是我改进的LINQPad代码,它使用C#语句工作得很好:

下面是在我的程序中不起作用的C代码:

var result = db.SLSPERDTs
 .Where(d => d.BEGDT > Convert.ToDateTime("01/01/2014"))
 .GroupBy(x => new { x.YR, x.PERNUM })
 .Select(p => p.OrderBy(j => j.BEGDT).FirstOrDefault());

var newresult = result.ToList();

它编译时没有任何错误,但ToList()方法使它每次都崩溃。至于驱动程序,我在同一台机器上运行两段代码(对不起,驱动程序不是我的专长)。在LINQPad中,我只是简单地指出了我在C代码中使用的同一个Oracle数据库。在LINQPad代码中,将其更改为First()或FirstOrDefault()似乎没有任何区别,它在任何情况下都有效

我在LINQPad中尝试了其他方法,当然,这些方法非常有效,并且给出了与上面相同的答案

SlsPerDts
.Where(d => d.BegDt > Convert.ToDateTime("01/01/2014"))
.OrderBy(j => j.BegDt)
.GroupBy(x => new { x.Yr, x.PerNum })
.Select(p => p.FirstOrDefault())
.ToList()
.Dump();
当然,这在我的C#代码中也会爆炸。如果我在C代码中编写以下代码,它不会爆炸,但也不会给出正确的结果

SlsPerDts
.Where(d => d.BegDt > Convert.ToDateTime("01/01/2014"))
.OrderBy(j => j.BegDt)
.GroupBy(x => new { x.Yr, x.PerNum })
.FirstOrDefault()
.ToList()
.Dump();
谢谢,
Craig

您使用的是来自linqpad和code的同一个数据库驱动程序吗?尝试使用
FirstOrDefault
而不是
First
。这似乎没有任何区别。但是删除First()方法如何获得我想要的结果?这张表有很多年和周期,但周数不同,所以我尝试将年和周期分组,只为每组抓取第一个周期。使用
g.FirstOrDefault()试试。
查看我的编辑。这可能会给你这种功能,但仍然让你做托利表也许。。
SlsPerDts
.Where(d => d.BegDt > Convert.ToDateTime("01/01/2014"))
.OrderBy(j => j.BegDt)
.GroupBy(x => new { x.Yr, x.PerNum })
.FirstOrDefault()
.ToList()
.Dump();