C# Linq OrderedQueryAble错误
首先,我有一个类通过linq变量操作一些数据:C# Linq OrderedQueryAble错误,c#,linq,entity-framework,C#,Linq,Entity Framework,首先,我有一个类通过linq变量操作一些数据: public class Result { public bool LongerThan10Seconds { get; set; } public int Id { get; set; } public DateTime CompletionTime { get; set; } } 然后在一个单独的类中,我使用它从linq变量获取信息 using (var data = new ProjectEntities()) {
public class Result
{
public bool LongerThan10Seconds { get; set; }
public int Id { get; set; }
public DateTime CompletionTime { get; set; }
}
然后在一个单独的类中,我使用它从linq变量获取信息
using (var data = new ProjectEntities())
{
Result lastResult = null;
List<Result> dataResults = new List<Result>();
foreach(var subResult in data.Status.Select(x => x.ID).Distinct().Select(Id => data.Status.Where(x => x.ID == Id).OrderBy(x => x.Time)))
{
if (lastResult != null)
{
if (subResult.CompletionTime.Subtract(lastResult.CompletionTime).Seconds > 10)
dataResults.Add(subResult);
}
lastResult = subResult;
}
但是我得到了一个错误:
Linq.IOrderedQueryAble不包含“CompletionTime”的定义,并且没有接受“System.Linq.IOrderedQueryAble”类型的第一个参数的扩展方法“CompletionTime”
如果有人能够提供一个解决方案来解决这个问题,我们会非常感激。我们已经尝试了一段时间,但就DateTime变量而言似乎有点困难 您的问题是子结果包含IOrderedQueryable,可能是IOrderedQueryable,而不是结果
在data.Status.Selectx=>x.ID.Distinct.SelectId=>data.Status.Wherex=>x.ID==ID.OrderByx=>x.Time中的foreach:var子结果中有这个。注意Select:Id=>data.Status.Wherex=>x.Id==Id.OrderByx=>x.Time中的内容。这将返回IOrderedQueryable,而不是T,其中T是data.Status集合中的任何类型
您需要使用First或类似方法从IOrderedQueryable中获取单个值,如下所示:
data.Status.Selectx=>x.ID.Distinct.SelectId=>data.Status.Wherex=>x.ID==ID.OrderByx=>x.Time.First中的var子结果
。。。或者将IEnumerable展平为IEnumerable:
data.Status.Selectx=>x.ID.Distinct.SelectManyId=>data.Status.Wherex=>x.ID==ID.OrderByx=>x.Time中的var子结果
编辑:在C不确定var子结果是什么类型的情况下,您可能也会遇到问题。如果它们都是结果类型对象,请尝试将var subResult替换为Result subResult。看起来您必须使用SelectMany来代替第二次Select方法调用
data.Status.Select(x => x.ID).Distinct()
.SelectMany(Id => data.Status.Where(x => x.ID == Id).OrderBy(x => x.Time))
您好,我尝试使用第一个方法,但我似乎仍然得到相同的错误,并且无法识别completionTime方法。您可能需要指定subResult的类型为Result。请参阅编辑。您好,很好的建议我刚刚收到一个错误,foreach语句无法从状态转换为Result@CatLikeOlive0data.Status实际上包含什么?它包含数据库实体objectHi,如下所示。我尝试了此解决方案,但仍然得到错误,似乎CompletionTime方法未被识别。它是您的实际类型子结果变量?它只是一个标准的linq varvar,只是一个语法糖,用于不指定实际变量类型,而是从表达式的左侧部分计算其类型。根据您在另一个线程中的回答,linq表达式返回状态对象列表,但您希望获得结果对象列表。那么,您的状态结果在哪里?Status类是否具有结果类型的属性?Status是数据库对象,其中as Result是im用于处理特定数据的类