[英]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 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系统类型。
那这个呢:
query = query.Where(d => d.Detectors.Count(t => t.DetectorStatus.Count() == 0) > 0);
但是我更喜欢Any()
而不是Count()>0
(如果可用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.