繁体   English   中英

C#Linq检查值是否存在

[英]C# Linq check if value exists

我有一个这样的数据库结构:

探测器:

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

我还想订购未知的探测器类型。 我该如何实现?
因为现在我计算结果。 但是,如果什么都没有,它什么也不会显示。

对于过滤器。

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

2 =系统正常
7 =离线

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

那这个呢:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM