2017-08-07 48 views
1

我有一个奇怪的问题,我完全不明白。也许我错过了一些东西。Linq/Linqtoexcel问题选择

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行/产品
  • 51产品折扣
  • 14'000产品 “到期收益率> 3.0” - 这怎么可能?

据我所知,我在折扣优惠搜索YTM产品。我如何从51中获得14'000个产品?!?我错过了什么吗?

最好的问候,朱利安

+0

也许是不应用&&的linq提供程序。尝试在第二个查询中调用'ToLis't:'from b在discounts.ToList()其中'强制查询到Linq到Object – octavioccl

+0

谢谢,但是我不知道为什么 –

回答

0

您正在使用第三方库,可以让你在XLS(Linq to Excel)做查询。但是,第二个查询中的问题应该是由于如何实现Linq提供程序来查询Excel文档。在您拨打ToList()时,您将这些行带入内存,因此您不再使用该Linq提供程序,现在您正在使用Linq对51行进行对象操作。

通常,当您将查询作为您的案例进行撰写时,您在第二个查询中应用的条件被Linq提供者视为&&。我不知道为什么Linq to Excel不是这样的情况

+0

当我使用&&时我得到完全不可预知的结果。我认为生病留在ToList –

+0

我通常使用[ClosedXML](https://github.com/ClosedXML/ClosedXML)当我需要操纵Excel文档 – octavioccl

+0

我不想操纵它,我只想得到一个“适用产品“与网站互动并自动购买产品;) –