我有两个不同的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;
}
答案 0 :(得分:0)
问题最终成为该模型的另一部分,但仅包含有关Oracle风险的一些信息:
第一个查询工作良好,因为它仅引用数据库中具有匹配列的一个特定字段(由于某种原因,oracle不在乎该模型的其余部分)。
第二个查询不起作用,因为它试图从表中拉出每一列,并且模型中缺少一个字段。