我有要求db
没关系
var allitems = ctx.Logging;
var filteredQuery = allitems.Where(x => x.Datatype == 1 || x.Datatype == 2)
.OrderByDescending(x => x.Id).ToList();
for (int i = 1; i < filteredQuery.Count; i++)
{
if (filteredQuery[i].Datatype == 2 && filteredQuery[i - 1].Datatype == 1)
{
TimeSpan differenceTicks = filteredQuery[i - 1].CurDateTime - filteredQuery[i].CurDateTime;
items.Add(new HeatMapViewModel
{
Latitude2 = filteredQuery[i].Latitude2,
Longitude2 = filteredQuery[i].Longitude2,
Difference = (int)differenceTicks.TotalMinutes
});
}
}
在这一行中我有错误
var filteredQuery = allitems.Where(x => x.Datatype == 1 || x.Datatype == 2).OrderByDescending(x => x.Id).ToList();
严重级代码描述项目文件行抑制状态 错误CS0019运算符'=='无法应用于'数据类型?'类型的操作数和'int'Traxgo.TrackerWeb.Domain C:\ Users \ nemes \ source \ Workspaces \ Eugene-Branch-Heatmap \ Traxgo.TrackerWeb.Domain \ Repository \ ReportsRepositoryEntities.cs 566 Active
我可以像这样重写代码
var filteredQuery = allitems.Where(x => x.Datatype == (Datatype?) 1 || x.Datatype == (Datatype?) 2).OrderByDescending(x => x.LogID).ToList();
但是这样吗?
Datatype
字段是数据类型类型。
public Datatype? Datatype { get; set; }
public enum Datatype : byte
{
Position = 0,
Start = 1,
Stop = 2,
AddressRequest = 3,
Alarm = 4,
IP = 5,
SettingsAck = 6,
Input3Changed = 7,
Input4Changed = 8,
ActivationSMS = 9,
}
答案 0 :(得分:1)
如果您希望获得DataType
1
或2
,则应使用相同的类型进行比较。
EF尝试验证您的运算符,他们可以在枚举与字节类型和整数类型之间进行比较。
将2
更改为(Datatype?)2
时,表示您将2
整数解析为DataType.Stop
所以你的代码应该改为
var filteredQuery = allitems.Where(x => x.Datatype == Datatype.Start || x.Datatype == Datatype.Stop).OrderByDescending(x => x.Id).ToList();
可读性和性能。