0

我想查询一个数据表,在其中我根据一些数据选择行列表并按日期对行进行排序并获取具有最新日期的行。这就是我所做的

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.

我怎样才能达到我的预期,我怎样才能解决这个错误?

4

3 回答 3

1

出现此错误的原因是Linq to Entities不支持很多Linq to Objects方法。这是因为 Linq to Entities 将您的查询转换为表达式树,然后将在 SQL 上执行。
您可以在此处找到支持和不支持的方法的完整列表。

正如@Gusdor 所提到的:表达式中无法识别的方法(您的lambdas 正在解析)被视为存储过程,而该存储过程又不存在。检查会发生什么的简单方法是查看 LINQ 方法的参数列表。

因此,要解决您的问题,您应该使用允许的方法,例如FirstOrDefault

var pvalueId = propertyValueId.FirstOrDefault();
于 2013-08-29T12:22:11.460 回答
0

你能试试:

var propertyValueId = _dbSis.Set<PropertyValue()
                            .Where(m=>m.PropertyInstanceId==id)
                            .OrderBy(z=>z.TimeStamp).FirstOrDefault();
于 2013-08-29T12:25:04.423 回答
0

似乎很奇怪,FirstOrDefault()不起作用。

var pvalueId = propertyValueId.FirstOrDefault();

如果不支持:

var pvalueId = propertyValueId.Take(1).SingleOrDefault();

或者,如果出于某种奇怪的原因,您的 L2EF 提供程序无法处理FirstOrDefaultTakeSingleOrDefault,您可以强行使用它:

PropertyValue pvalueId = null;
foreach (var pv in propertyValueId)
{
    pvalueId = pv;
    break;
}
于 2013-08-29T12:19:09.310 回答