林克:按日期排序,找到第一个元素
本文关键字:第一个 元素 排序 日期 林克 | 更新日期: 2023-09-27 18:29:25
我想查询一个数据表,在那里我根据一些数据选择行列表,并按日期对行进行排序,得到最新日期的行。这就是我所做的
var propertyValueId = _dbSis.Set<PropertyValue>()
.Where(m => m.PropertyInstanceId == id)
.OrderBy(z => z.TimeStamp);
var pvalueId = propertyValueId.ElementAtOrDefault(0);
但我在propertyValueId.ElementAtOrDetault(0);
上出错
LINQ to Entities does not recognize the method 'Sorama.DataModel.SIS.Configuration.PropertyValue ElementAtOrDefault[PropertyValue](System.Linq.IQueryable`1[Sorama.DataModel.SIS.Configuration.PropertyValue], Int32)' method, and this method cannot be translated into a store expression.
我怎样才能达到我所期望的,怎样才能解决错误?
出现此错误的原因是Linq-to-Entities不支持许多Linq-to-Objects方法。这是因为Linq-to-Entities将您的查询转换为表达式树,然后在SQL上执行
支持和不支持的方法的完整列表,您可以在此处找到
正如@Gusdor所提到的:表达式中未识别的方法(您的lambdas正在解析到该方法)被视为存储过程,而存储过程又不存在。检查将要发生的情况的简单方法是查看LINQ方法的参数列表。
因此,要解决您的问题,您应该使用允许的方法,如FirstOrDefault
:
var pvalueId = propertyValueId.FirstOrDefault();
FirstOrDefault()
不工作似乎很奇怪。
var pvalueId = propertyValueId.FirstOrDefault();
如果不支持:
var pvalueId = propertyValueId.Take(1).SingleOrDefault();
或者,如果由于某种奇怪的原因,您的L2EF提供程序无法处理FirstOrDefault
、Take
或SingleOrDefault
,您可以强行执行:
PropertyValue pvalueId = null;
foreach (var pv in propertyValueId)
{
pvalueId = pv;
break;
}
你能试试吗:
var propertyValueId = _dbSis.Set<PropertyValue()
.Where(m=>m.PropertyInstanceId==id)
.OrderBy(z=>z.TimeStamp).FirstOrDefault();