2017-08-07 34 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

我不想操縱它,我只想得到一個「適用產品「與網站互動並自動購買產品;) –