无法弄清楚如何在此LINQ查询中添加where子句

时间:2014-11-18 01:49:26

标签: c# mysql linq

我还在努力挑选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子句,这样我就可以在某个日期范围之间得到结果,使用#34; TimeStamp&#34;来自mysql数据库。我尝试过添加

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

但是我知道我一定做错了,因为它告诉我在这种情况下行不存在。我尝试在group子句之前添加where子句,在select之后但没有取得任何成功。有人能提供任何建议吗?

(编辑:TimeStamp是日期时间)

1 个答案:

答案 0 :(得分:1)

我们假设您有dateFromdateTo个变量作为日期范围的边界。由于TimeStamp列的类型是日期时间,因此您应使用row.Field<DateTime>("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的记录