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