我有请求 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:\Usersemes\source\Workspaces\Eugene-Branch-Heatmap\Traxgo.TrackerWeb.Domain\Repository\ReportsRepositoryEntities.cs 566 活动
我可以像这样重写代码
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,
}
如果你想得到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();
提高可读性和性能。