我还在努力挑选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是日期时间)
答案 0 :(得分:1)
我们假设您有dateFrom
和dateTo
个变量作为日期范围的边界。由于TimeStamp
列的类型是日期时间,因此您应使用row.Field<DateTime>("TimeStamp")
,并且where子句应位于from
和group
之间,如下所示
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
的记录