【问题标题】:can't figure out how to add where clause to this LINQ query无法弄清楚如何将 where 子句添加到此 LINQ 查询
【发布时间】:2014-11-18 01:49:25
【问题描述】:

我仍在尝试获取 LINQ,并且想知道是否有人可以阐明我在这里做错了什么。我正在从数据库中提取一堆行,并按 ManufacturerSKU 分组(ManufacturerSKU 有多个具有不同 ListingPrice 的行,我从数据库中获取具有最便宜的 ListingPrice 的 ManufacturerSKU)

//store the cheapest row for a ManufacturerSKU in a list
var product_result = (
    from row in dtProductListings.AsEnumerable()
    group row by row.Field<string>("ManufacturerSKU") into g
    select new Product
    {
        ManufacturerSKU = g.Key,
        ListingPrice = g.Min(x => x.Field<double>("ListingPrice")),
        Manufacturer = g.Min(z => z.Field<string>("Manufacturer")),
    }).ToList();

无论如何,我一直在尝试在查询中添加 where 子句,这样我就可以使用 mysql 数据库中的“TimeStamp”列在某个日期范围内获得结果。我试过添加

where row.Field< what data type even goes in here for a date time? >("TimeStamp") >= etc..

但我知道我一定做错了什么,因为它告诉我行在这种情况下不存在。我尝试在 group 子句之前添加 where 子句,在 select 之后但没有任何成功。请问有大神可以给点建议吗?

(编辑:TimeStamp 是一个日期时间)

【问题讨论】:

    标签: c# mysql linq


    【解决方案1】:

    假设您有dateFromdateTo 变量作为日期范围的边界。由于TimeStamp列的类型是日期时间,你应该使用row.Field&lt;DateTime&gt;("TimeStamp"),where子句应该在fromgroup之间,如下所示

    var dateFrom = new DateTime(2014, 11, 1);
    var dateTo = new DateTime(2014, 11, 30);
    
    var product_result = (
        from row in dtProductListings.AsEnumerable()
        where row.Field<DateTime>("TimeStamp") > dateFrom 
        && row.Field<DateTime>("TimeStamp") < dateTo
        group row by row.Field<string>("ManufacturerSKU") into g
        select new Product
        {
            ManufacturerSKU = g.Key,
            ListingPrice = g.Min(x => x.Field<double>("ListingPrice")),
            Manufacturer = g.Min(z => z.Field<string>("Manufacturer")),
        }).ToList();
    

    上述代码将检索 2014 年 11 月 1 日至 2014 年 11 月 30 日期间带有 TimeStamp 的记录

    【讨论】:

    • 把 where 子句放在那里效果很好,谢谢!我似乎遇到了一个奇怪的问题,即它没有在指定的时间段内提取某些日期,例如 DateTime(2014, 11, 16) 到 DateTime(2014, 11, 18) 并且似乎缺少其中的一些日期范围..可能是由于数据库日期时间列的格式不同吗?例如 2014-11-17 12:54:18
    • 这很奇怪,如果范围在DateTime(2014, 11, 16)DateTime(2014, 11, 18) 之间,它应该提取TimeStamp 等于2014-11-17 12:54:18 的记录。您确定 TimeStamp 是日期时间,而不是 varchar?
    • 啊这是我的代码中的逻辑错误,再次感谢您的帮助 LINQ 是如此强大但很难进入哈哈。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多