C#Linq检查值是否存在

时间:2017-04-19 07:48:48

标签: c# linq

我有一个像这样的数据库:

检测器:

DetectorID    SiteID    TrackID
  1401         1400        2
  1402         1400        2
  1601         1600        2
  1602         1600        2

DetectorStatus:

DetectorStatusID    DetectorID    DateTime    DetectorModeID    Status
       1               1601       TimeStamp        2             0.86
       2               1602       TimeStamp        2             0.84

现在我有一个过滤器让我可以根据他们的DetectorMode看到探测器。

代码:

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);
    }
}

现在,当探测器未知时。它不会出现在 DetectorStatus 表中。如示例中所示。 DetectorID的 1401 1402 未知。

当我过滤时:

if (filternotworking.IsChecked == true)
{
    query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count(a => a.DetectorModeID == 6 || a.DetectorModeID == 7) > 0) > 0);
}

我还想订购未知的探测器类型。 我怎么做到这一点?
因为现在我算结果。但如果什么都没有,它就不会显示任何东西。

对于过滤器。

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

2 =系统正常
7 =离线

但是,当检测器不在 DetectorStatus 表中时。它显然在此表中没有任何值。 在这种情况下,探测器的模式为“未知” 我希望能够过滤Unknow系统类型。

1 个答案:

答案 0 :(得分:3)

这个怎么样:

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

但我希望Any()代替Count()>0,如果可用的话。