ORA-00904带有linq查询的偶然无效标识符

时间:2019-02-19 20:26:04

标签: c# oracle entity-framework linq data-access

我有两个不同的linq表达式,它们引用数据库中的同一列。一个工作正常,但是另一个抛出无效的标识符异常(ORA-00904)。

我发现的大多数问题都带有一些语法错误的裸SQL查询。其他人则与实体模型有关,但是鉴于实体模型在一次查询中并未遇到问题,因此我不认为问题在于模型。

一种有效的方法:

    public List<DateTime> GetAvailableDates()
    {
        var retData = new List<DateTime>();

        using (var context = new CASTDbContext())
        {
            var result = context.SomeDataEntity.Select(x => x.CAPTURE_DATE).Distinct().ToList();          
            if(result != null && result.Count > 0)
            {
                retData = result;
            }
        }

        return retData;
    }

不起作用的那个:

    public List<SomeDataModel> GetSomeDataByDate(DateTime date)
    {
        var retData = new List<SomeDataModel>();

        using (var context = new SomeDbContext())
        {                
            var result = context.SomeDataEntity
                .Where( y => DbFunctions.TruncateTime(y.CAPTURE_DATE) == date.Date).ToList(); // the line that's throwing the exception

            if (result != null && result.Count > 0)
            {
                foreach (var item in result)
                {
                    retData.Add(mapper.Map<SomeDataModel>(item));
                }
            }
        }

        return retData;
    }

1 个答案:

答案 0 :(得分:0)

问题最终成为该模型的另一部分,但仅包含有关Oracle风险的一些信息:

第一个查询工作良好,因为它仅引用数据库中具有匹配列的一个特定字段(由于某种原因,oracle不在乎该模型的其余部分)。

第二个查询不起作用,因为它试图从表中拉出每一列,并且模型中缺少一个字段。