使用数据类型进行查询

时间:2017-11-01 12:10:57

标签: c# mysql asp.net asp.net-mvc

我有要求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,
}

1 个答案:

答案 0 :(得分:1)

如果您希望获得DataType 12,则应使用相同的类型进行比较。

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();

可读性和性能。