【问题标题】:LINQ "ORA-00933: SQL command not properly ended" errorLINQ“ORA-00933:SQL 命令未正确结束”错误
【发布时间】:2013-12-31 00:48:25
【问题描述】:

下面的 LINQ 语句不喜欢我的 .ToList() 方法。我在其他 LINQ 语句中使用了它,但没有使用 group by。删除 .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 表中,我只是想按 YRPERNUM 列进行分组,我只想要每个组的第一行。

【问题讨论】:

  • 您使用的是来自 linqpad 和 code 的相同数据库驱动程序吗?
  • 尝试使用FirstOrDefault 而不是First
  • 这似乎没有任何区别。

标签: c# linq oracle11g


【解决方案1】:

这可能是因为您选择了g.First(),而这将始终是一个对象或空值(我认为)。试试这个:

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

【讨论】:

  • 但是删除 First() 方法如何让我得到我正在寻找的结果?我的这张表有一堆年份和时期,但周数不同,所以我试图将年份和时期分组在一起,只为每个组抓取第一个。
  • g.FirstOrDefault()试试看我的编辑。这可以为您提供该功能,并且仍然可以让您执行 tolist 可能..
【解决方案2】:

在网络上进行一些研究后,这是我精炼的 LINQPad 代码,使用 C# 语句可以正常工作:

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())
.ToList()
.Dump();

这是在我的程序中不起作用的 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() 似乎没有任何区别,它在任何一种情况下都有效!

【讨论】:

    【解决方案3】:

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

    谢谢, 克雷格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多