Linq / Linqtoexcel 问题选择
Linq / Linqtoexcel issue selecting
我有一个奇怪的问题,我完全不明白。也许我错过了什么。
var excel = new ExcelQueryFactory("products.xlsx");
//get all products with discount
var discounts = from s in excel.Worksheet() where
s["Discount/Premium"].Cast<string>().StartsWith("-") select s;
//Select products with a YTM higher than 3
var applicable = from b in discounts where
b["YTM"].Cast<double>() > 3.0 select b;
MessageBox.Show(discounts.Count().ToString()); //<- returns 51
MessageBox.Show(applicable.Count().ToString()); //<- returns 14826
products.xlsx
绕过 50'000
Rows/Products
- 有
51
件商品有折扣
- 有
14'000
个产品具有 "YTM > 3.0" - 这怎么可能?
据我所知,我正在搜索打折的 YTM 产品。我怎样才能从 51 获得 14'000 种产品?!?我错过了什么吗?
祝好,朱利安
您正在使用允许您通过 xls 进行查询的第 3 方库 (Linq to Excel)。但是您的第二个查询中的问题应该是由于如何实施 Linq 提供程序来查询 excel 文档。在您调用 ToList()
时,您正在将这些行存入内存,因此您不再使用该 Linq 提供程序,您现在使用 Linq to Object 处理 51 行。
通常,当您根据情况编写查询时,您在第二个查询中应用的条件会被 Linq 提供程序视为 &&
。我不知道为什么 Linq to Excel
不是这种情况
我有一个奇怪的问题,我完全不明白。也许我错过了什么。
var excel = new ExcelQueryFactory("products.xlsx");
//get all products with discount
var discounts = from s in excel.Worksheet() where
s["Discount/Premium"].Cast<string>().StartsWith("-") select s;
//Select products with a YTM higher than 3
var applicable = from b in discounts where
b["YTM"].Cast<double>() > 3.0 select b;
MessageBox.Show(discounts.Count().ToString()); //<- returns 51
MessageBox.Show(applicable.Count().ToString()); //<- returns 14826
products.xlsx
绕过50'000
Rows/Products- 有
51
件商品有折扣 - 有
14'000
个产品具有 "YTM > 3.0" - 这怎么可能?
据我所知,我正在搜索打折的 YTM 产品。我怎样才能从 51 获得 14'000 种产品?!?我错过了什么吗?
祝好,朱利安
您正在使用允许您通过 xls 进行查询的第 3 方库 (Linq to Excel)。但是您的第二个查询中的问题应该是由于如何实施 Linq 提供程序来查询 excel 文档。在您调用 ToList()
时,您正在将这些行存入内存,因此您不再使用该 Linq 提供程序,您现在使用 Linq to Object 处理 51 行。
通常,当您根据情况编写查询时,您在第二个查询中应用的条件会被 Linq 提供程序视为 &&
。我不知道为什么 Linq to Excel