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);
}
}
现在,当探测器未知时。它不会出现在检测器状态表中。如示例中所示。检测器的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);
}
我还想订购未知的探测器类型。
我如何做到这一点?因为现在我计算结果。但是如果什么都没有,它也不会显示任何东西 用于过滤器 探测器代码告诉我探测器的状态。例如: 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);