我有一个具有记录时间的特定id的数据库,我需要帮助才能找出ID时间之间的时间间隔,例如13:05:15和13:05:45但是如果时间间隔超过10 / 15秒它需要记录,所以它可以用于说文本文件/其他数据等。我先前在这里问过类似的问题,这是我的代码到目前为止的样子:
此类用于通过查询/循环的linq var来操作数据
public class Result
{
public bool LongerThan10Seconds { get; set; }
public int Id { get; set; }
public DateTime CompletionTime { get; set; }
}
这是一个单独的类中的foor循环,这是我最初的想法
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 does not contain a definition for 'CompletionTime' and no Extension method 'CompletionTime' accepting a first argument of type 'System.Linq.IOrderedQueryable.
我更改了for循环以使用操作类的对象
foreach(Result subResult in data.AssetStatusHistories.Select(x => x.ID).Distinct().SelectMany(Id => data.AssetStatusHistories.Where(x => x.ID == Id).OrderBy(x => x.TimeStamp)))
{
if (lastResult != null)
{
if (subResult.CompletionTime.Subtract(lastResult.CompletionTime).Seconds > 10)
{
vehicleResults.Add(subResult);
}
}
lastResult = subResult;
}
虽然现在我收到错误:Cannot convert type 'Project.Status' to 'Project.Result'
有没有人可能有解决方案来解决这个问题我已经浏览了一些资源,但即使在微软的Linq论坛上也找不到任何帮助。任何帮助深表感谢 ! :)
答案 0 :(得分:1)
尝试在.ToList()
之后将OrderBy
添加到LINQ语句的末尾:
var results = data.Status.Select(x => x.ID).Distinct()
.Select(Id => data.Status.Where(x => x.ID == Id)
.OrderBy(x => x.Time)
.ToList();
foreach(var subResult in results))
{
...
}
另外,我认为您可以修改LINQ来GroupBy
列ID
,但如果您愿意,可以进行研究。 (Tutorial)
答案 1 :(得分:0)
您的linq查询(在第二次尝试中)将返回IEnumerable,其中包含data.AssetStatusHistories
的元素类型。我假设这是某种IEnumerable<Project.Status>
,所以你实际上试图将Project.Status
个对象分配给Result
类型的迭代器变量(subResult),这就是为什么你&# 39;重新获得错误Cannot convert type 'Project.Status' to 'Project.Result'
。
所以你的问题实际上不在linq查询中,你只需要一种方法将Project.Status
个对象转换为Project.Result
个对象。