LINQ无法隐式转换

时间:2014-01-28 13:24:56

标签: c# linq entity-framework implicit-conversion

似乎在尝试将类设置为我的linq变量时遇到问题:

这是从数据库中处理数据的类:

public class Result
{
    public bool LongerThan10Seconds { get; set; }
    public int Id { get; set; }
    public DateTime CompletionTime { get; set; }
    public double longitude { get; set; }
    public double latitude { get; set; }
}

然后我使用这个LINQ语句来获取特定数据库中的数据:

foreach (var query in data.AssetStatusHistories
                          .Where(x => x.TimeStamp <= ft)
                          .Where(x => x.AssetID == guid))
{
    if (lastResult != null)
    {
        if ((query.TimeStamp - lastResult.CompletionTime).TotalSeconds > 10)
        {
            dataResults.Add(new Result() { Id = query.ID,
                                           longitude = query.Longitude, 
                                           latitude = query.Latitude });
        }
        lastResult = query; // <-- Error Is Here
    }
}

错误是lastResult =查询,我一直得到无法隐式转换“Project.Data”到“Project.Result”有没有人有任何推荐的解决方案?

我已经看到了一些关于这个错误的内容,但没有专门针对LINQ。

2 个答案:

答案 0 :(得分:4)

它确切地告诉您它的含义:您无法将Project.Data转换为Project.Result

data.AssetStatusHistories.Where(x => x.TimeStamp <= ft) .Where(x => x.AssetID == guid)不返回Project.Result个对象的集合,而是Project.Data类型的对象。

修改

如果你的lastResult类型为Result,我假设您只需输入:

lastResult = new Result(){Id = query.ID,
                          longitude = query.Longitude,
                          latitude = query.Latitude });

但在这种情况下它不起作用。这不是与linq相关的问题。您的lastResult对象已分配到其他位置。如果要在末尾分配新的lastResult对象,您希望从哪里获取CompletionTime属性值?在我粘贴的代码中没有将它分配到任何地方。

答案 1 :(得分:0)

**lastResult = query;** <--Error Is Here

变量lastResult可能属于IQueryable<Project.Result>类型,但您要从IQueryable<Project.Data>代码中加入data.AssetStatusHistories.Where(x => x.TimeStamp <= ft) .Where(x => x.AssetID == guid)的集合。

基本上,这意味着无法将Project.Data转换为Project.Result

尝试给我们提供更多Project.Data类的上下文,这样我们就可以看到你想要实现的目标了吗?在foreach循环之前发生了什么。你为什么要说lastResult=query  通过提供这些细节,我们可能会提供更多帮助!