Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c数据检索中lambda表达式的问题_C#_Lambda - Fatal编程技术网

C# c数据检索中lambda表达式的问题

C# c数据检索中lambda表达式的问题,c#,lambda,C#,Lambda,我正在编写一个系统来跟踪传感器的观测值,例如不同地点的温度、风向和速度。我使用代码优先的方法在VS2015中用C编写它。虽然我有相当多的编程经验,但我对C语言和代码优先的方法还是比较陌生的 我将我的类定义如下。我已经构建了一个REST api来接受通过Post读取的观察结果,这促使我希望传感器由字符串而不是整数设置密钥——一些传感器内置了自己的唯一标识符。否则,我会尝试仿效微软Contoso大学讲师-课程-入学的例子 我试图实现的是一个特定站点的页面,其中列出了站点上的传感器及其读数。最终,本页

我正在编写一个系统来跟踪传感器的观测值,例如不同地点的温度、风向和速度。我使用代码优先的方法在VS2015中用C编写它。虽然我有相当多的编程经验,但我对C语言和代码优先的方法还是比较陌生的

我将我的类定义如下。我已经构建了一个REST api来接受通过Post读取的观察结果,这促使我希望传感器由字符串而不是整数设置密钥——一些传感器内置了自己的唯一标识符。否则,我会尝试仿效微软Contoso大学讲师-课程-入学的例子

我试图实现的是一个特定站点的页面,其中列出了站点上的传感器及其读数。最终,本页将以图形形式显示数据。但现在,我只是在寻找原始数据

public class Site
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Sensor> Sensors { get; set; }
}
public class Sensor
{
[Key]
    public string SensorName { get; set; }
    public int SensorTypeId { get; set; }
    public int SiteId { get; set; }
    public ICollection<Observation> Observations { get; set; }
}
public class Observation
{
    public int Id { get; set; }
    public string SensorName { get; set; }
    public float ObsValue { get; set; }
    public DateTime ObsDateTime { get; set; }
}
我曾经得到一个关于无法将lambda表达式转换为string类型的错误,但后来我使用System.Data.Entity包含了该错误;这个错误变成了两个错误。。。在“include”上,我无法解析方法“includelambda表达式”。。。。在“选择”上,我得到的Icollection不包含选择的定义


可能会有各种各样的不好的事情发生,但是如果有人能解释错误在哪里,更重要的是为什么它们是错误,那么我将非常感激。

简单地说,你可以用like

viewModel.Site = _context.Sites
                .Include("Sensors).Include("Sensors.Observations");

希望这有帮助。

按照ViewModel的设置方式,您将拥有3组不相关的数据。地点、传感器和观测。站点将与传感器没有内在联系-您必须手动在外键上匹配它们。实际上,您的ViewModel应该只是一个站点列表。你想做什么 @模型。站点[0]。传感器[0]。观测值[0] 不是像这样复杂的事情 var site=@Model.Sites[0];var sensor=@Model.Sensors.Wheres=>SiteId==site.Id.Single;等等

试着做 viewModel.Site=\u context.Sites.IncludeSensors.Observations.ToList; 只需一行就可以完成

顺便说一下,您报告收到的错误之一是因为您使用的是“选择”而不是“选择”

最后,请注意,像这样的快速加载可能会产生大量内存数据。考虑把你的调用分解成每个关系,这样你就可以显示一个传感器列表,然后点击,一个下拉将调用一个API来检索站点列表等等。这是一个更加流线型的,它可以防止你因为页面加载这么多信息而被耽搁。 更新
我已经为你准备好了,你可以浏览和浏览。数据在Startup.Configure方法中填充,并在页面中检索。。这就产生了,我相信这就是你要寻找的。

你在某处漏掉了一个。我猜了一下第一批传感器之后的情况。包括传感器。包括。。。。。这会产生不同的错误,无法将system.data.entity.Infrastructure.dbquery类型隐式转换为project.models.site。传感器后包括传感器。传感器后包括传感器。观测传感器后??代码的其余部分是我猜到的,这就产生了上述错误。所以我把viewModel.Site改成了viewModel,虽然实际上它是var viewModel,而不是var viewModel.Site我改变了原来的问题。VS接受,但在运行时视图中,@Model.Site.Name给出错误System.Data.Entity.Infrastructure.DbQuery'不包含“Site”的定义。因此,我还没有找到一个可行的解决方案。感谢您的投入——您对@model.sites[0]等的建议对我来说并不明显。这看起来像是对视图的一个更改。我可以问一下您建议我对viewModel/模型做什么更改吗??我已经试过了你建议的代码,但是我现在开始使用include,并且在观察中出现了一个错误。我在其他段落中提到了这一点,但我正在尝试首先返回数据,然后我可以简化流程,比如在观测值中设置日期范围等。您的DB对象通过外键进行关联。当您将它们传递到前端时,您希望保持这种关系。通过在viewmodel中使用三个单独的字段,您实际上打破了这一点,您必须通过键查找手动重新建立这种关系。若您在使用LINQ和Include时遇到问题,我认为我的问题在于有三个单独的字段。如何构建viewmodel以保留外键-我假设我在上面做得不对。那么我如何在控制器中填充它呢?站点是站点的集合。站点对象具有传感器的集合。因此,您要执行站点[0]。传感器[0]。观察。当前ViewModel有3个单独的列表。你想要一个。我显然遗漏了一些东西-我尝试将我的viewmodel定义为站点[0]-但VS拒绝了这一点,所以这大概不是你要我做的。我明白了 我需要这样做,我只是不知道如何实施它。
public actionresult Details()
var viewModel.Site = _context.Sites
                .Include(i => i.Sensors.select(c => c.Observations));
viewModel.Site = _context.Sites
                .Include("Sensors).Include("Sensors.Observations");