Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#Linq检查值是否存在_C#_Linq - Fatal编程技术网

C#Linq检查值是否存在

C#Linq检查值是否存在,c#,linq,C#,Linq,我的数据库结构如下: 检测器: DetectorID SiteID TrackID 1401 1400 2 1402 1400 2 1601 1600 2 1602 1600 2 DetectorStatusID DetectorID DateTime DetectorModeID Status 1

我的数据库结构如下:

检测器:

DetectorID    SiteID    TrackID
  1401         1400        2
  1402         1400        2
  1601         1600        2
  1602         1600        2
DetectorStatusID    DetectorID    DateTime    DetectorModeID    Status
       1               1601       TimeStamp        2             0.86
       2               1602       TimeStamp        2             0.84
var query = loadOperation.Entities; //Define the query

if (ShowAtlas == false && ShowPhoenix == false || ShowAtlas == true && ShowPhoenix == true)
{
    if (filterany1.IsChecked == true)
    {
        query = query.OrderBy(d => d.SiteName);
    }
    if (filterok1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 2) > 0) > 0);
    }
    if (filtermaintenance1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 3 || a.DetectorModeID == 4 || a.DetectorModeID == 5) > 0) > 0);
    }
    if (filternotworking.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 6 || a.DetectorModeID == 7) > 0) > 0);
    }
}
检测器状态:

DetectorID    SiteID    TrackID
  1401         1400        2
  1402         1400        2
  1601         1600        2
  1602         1600        2
DetectorStatusID    DetectorID    DateTime    DetectorModeID    Status
       1               1601       TimeStamp        2             0.86
       2               1602       TimeStamp        2             0.84
var query = loadOperation.Entities; //Define the query

if (ShowAtlas == false && ShowPhoenix == false || ShowAtlas == true && ShowPhoenix == true)
{
    if (filterany1.IsChecked == true)
    {
        query = query.OrderBy(d => d.SiteName);
    }
    if (filterok1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 2) > 0) > 0);
    }
    if (filtermaintenance1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 3 || a.DetectorModeID == 4 || a.DetectorModeID == 5) > 0) > 0);
    }
    if (filternotworking.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 6 || a.DetectorModeID == 7) > 0) > 0);
    }
}
现在我有了一个过滤器,它可以让我根据检测器的模式看到检测器

代码:

DetectorID    SiteID    TrackID
  1401         1400        2
  1402         1400        2
  1601         1600        2
  1602         1600        2
DetectorStatusID    DetectorID    DateTime    DetectorModeID    Status
       1               1601       TimeStamp        2             0.86
       2               1602       TimeStamp        2             0.84
var query = loadOperation.Entities; //Define the query

if (ShowAtlas == false && ShowPhoenix == false || ShowAtlas == true && ShowPhoenix == true)
{
    if (filterany1.IsChecked == true)
    {
        query = query.OrderBy(d => d.SiteName);
    }
    if (filterok1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 2) > 0) > 0);
    }
    if (filtermaintenance1.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 3 || a.DetectorModeID == 4 || a.DetectorModeID == 5) > 0) > 0);
    }
    if (filternotworking.IsChecked == true)
    {
        query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 6 || a.DetectorModeID == 7) > 0) > 0);
    }
}
现在,当探测器未知时。它不会出现在检测器状态表中。如示例中所示。检测器的14011402未知

当我打开过滤器时:

if (filternotworking.IsChecked == true)
{
    query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 6 || a.DetectorModeID == 7) > 0) > 0);
}
我还想订购未知的探测器类型。 我如何做到这一点?
因为现在我计算结果。但是如果什么都没有,它也不会显示任何东西

用于过滤器

探测器代码告诉我探测器的状态。例如:

2=系统正常
7=离线

但是,当探测器不在探测器状态表中时。显然,该表中没有任何值。 在这种情况下,探测器的模式未知。
我希望能够对未知的系统类型进行过滤。

这是怎么回事:

query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count() == 0) > 0);
但是我更喜欢
Any()
,而不是
Count()>0
,如果有的话。

这个怎么样:

query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count() == 0) > 0);

但是我更喜欢
Any()
而不是
Count()>0
,如果可用。

如何筛选那些不在
DetectorStatus
中的,它们没有
DetectorStatus。Count
如果您能根据示例源数据发布预期结果,包括数据,这会有所帮助。我想筛选检测器。但如果DetectorStatus表中不存在,则其DetectorModeID未知。当未知/不存在于该表中时。我希望能够对其进行筛选。一般情况下,为了避免空引用,您需要避免使用quantity。编辑@MightyBadaBoom如何筛选不在
DetectorStatus
中的那些。他们没有
DetectorStatus。计数
如果您根据您的示例源数据。我想对检测器进行过滤。但如果DetectorStatus表中不存在,则其DetectorModeID未知。当未知/不存在于该表中时。我希望能够对其进行筛选。一般情况下,为了避免空引用,您需要避免使用quantity。对@MightyBadaBoom进行了编辑,这很有效!然而,有没有一种方法可以将其与检测器代码6和7结合起来?其中(d=>d.DetectorStatus.Count(t=>t.DetectorStatus.Count(a=>a.DetectorModeID==6 | | a.DetectorModeID==7)>0)>0);其中(d=>d.DetectorStatus.Count(t=>t.DetectorStatus.Count()==0 | | t.DetectorStatus.Count(a=>a.DetectorModeID==6 | | a.DetectorModeID==7)>0)>0);这管用!然而,有没有一种方法可以将其与检测器代码6和7结合起来?其中(d=>d.DetectorStatus.Count(t=>t.DetectorStatus.Count(a=>a.DetectorModeID==6 | | a.DetectorModeID==7)>0)>0);其中(d=>d.DetectorStatus.Count(t=>t.DetectorStatus.Count()==0 | | t.DetectorStatus.Count(a=>a.DetectorModeID==6 | | a.DetectorModeID==7)>0)>0);