C# 具有实体框架的多个条件以获取所需记录

C# 具有实体框架的多个条件以获取所需记录,c#,.net,entity-framework,linq,entity-framework-6,C#,.net,Entity Framework,Linq,Entity Framework 6,我正在尝试使用以下逻辑从统计表中获取单个记录: 1st preference : Flag = 0 2nd preference : Flag = 1 3rd preference : Flag = 2 (only if we dont have records with flag=0 and 1) 表:统计数据 Id Zoneid Emergency Flag Date 1 100 0 1 2016-6-01 13:10:05.

我正在尝试使用以下逻辑从统计表中获取单个记录:

1st preference :  Flag = 0
2nd preference :  Flag = 1
3rd preference :  Flag = 2 (only if we dont have records with flag=0 and 1)
表:统计数据

Id   Zoneid  Emergency   Flag   Date
1    100      0           1     2016-6-01 13:10:05.360
2    100      2           2     2016-6-01 14:10:05.360
3    100      0           2     2016-6-01 15:10:05.360
4    100      2           2     2016-6-01 16:10:05.360
5    100      2           0     2016-6-01 14:10:05.360
6    100      1           2     2016-6-01 13:10:05.360
我试图实现的逻辑如下所示:

If(Flag == 0) then  
   take records with highest emergency(order by emergency desc) but if multiple records found then take latest record order by date desc(only 1 ).
else if(flag==1) 
     Take records with highest emergency(order by emergency desc) but if multiple records found then take latest record order by date desc(only 1).
else if (no records with flag==0 and flag==1 found)
    Take records with highest emergency(order by emergency desc) but if multiple records found then take latest record order by date desc(only 1).  
数据模型:

public partial class Zone
{
    public int Id { get; set; }
    public string Area { get; set; }
    public virtual ICollection<Statistics> Statistics { get; set; }
}

public partial class Statistics
{
    public int Id { get; set; }
    public int ZoneId { get; set; }
    public int Emergency { get; set; }
    public int Flag { get; set; }
    public System.DateTime Date { get; set; }
    public virtual Zone Zone { get; set; }
}
因此,这里我不知道如何实现所有这些条件并获得所需的统计记录。

尝试一下(警告:未测试,没有时间重新创建类和所有):


您所描述的逻辑听起来像是简单的优先级顺序-首先是通过
标志
升序,然后(对于相等
标志
)通过
紧急
降序,然后(对于相等
标志
紧急
)通过
日期
降序,并按照该顺序记录第一条记录:

StatisticsId = (from s in z.Statistics
                where s.ZoneId == 100
                orderby s.Flag, s.Emergency descending, s.Date descending
                select (int?)s.Id).FirstOrDefault() ?? 0 

如何
选择前1名。。。按标志下单
resp<代码>LINQ OrderBy(…)的FirstOrDefault?@LocEngineer你能提供关于实体框架的答案吗?啊,我没想到会遇到紧急情况。感谢您完成订单条款。根据您的回答,我不需要任何测试,因为我知道它在所有情况下都有效。您总是像往常一样摇滚。谢谢:)
var statistics= (from z in db.Zone
                 select new 
                 {
                     ZoneName = z.Area,
                     StatisticsId = z.Statistics.OrderBy(t=>t.Flag)
                     .Where(t => t.ZoneId == 100).Select(t => t.Id).FirstOrDefault() 
                 });
StatisticsId = (from s in z.Statistics
                where s.ZoneId == 100
                orderby s.Flag, s.Emergency descending, s.Date descending
                select (int?)s.Id).FirstOrDefault() ?? 0