1

LinqToExcelライブラリに出会い、少し遊んでいます。クエリの仕組みを誤解しているようです。いくつかの顧客情報を含む簡単なワークシートを作成しました。LinqPad を使用して、次のようにクエリをセットアップしました。

void Main()
{
    string path = @"E:\Documents\LINQPad\LINQPad Queries\LinqToExcel\Customers.xlsx";

    var excel = new ExcelQueryFactory(path);

    // Mappings and Transforms:
    excel.AddMapping<Customer>(c => c.Contact, "Contact Person");
    excel.AddMapping<Customer>(c => c.CompanyName, "Company Name");
    excel.AddMapping<Customer>(c => c.IsPreferred, "Preferred");
    excel.AddTransformation<Customer>(c => c.IsPreferred, cellValue => cellValue == "Yes");

    // Query:
    var preferrdCompanies = from c in excel.Worksheet<Customer>("Customers")
                            where c.IsPreferred  // this has no effect?
                            orderby c.CompanyName
                            select new { c.CompanyName, c.Contact, c.IsPreferred };

    // Display:
    preferrdCompanies.Dump("Preferred Customers:");
}

// Define other methods and classes here
class Customer
{
    public string Contact { get; set; }
    public string CompanyName { get; set; }
    public bool IsPreferred { get; set; }   
}

何らかの理由で、述語が適用されていません。テキスト「Yes」からtrue (bool)への変換が機能しています。私が書く場合:

preferrdCompanies.ToList().Where(c => c.IsPreferred).Dump("Preferred Customers:");

あなたが期待するように、私はフィルタリングされたリストを取得します。コードで単純なエラーを探していましたが、例外はスローされず、明らかに間違っているものは何も見つからないので、クエリの機能が理解できていないと思いますか?

回答/説明をいただければ幸いです。

4

1 に答える 1

0

c.IsPreferred == truewhere句で明示的に設定してみて、問題が解決するかどうかを確認してください。

var preferrdCompanies = from c in excel.Worksheet<Customer>("Customers")
                        where c.IsPreferred == true
                        orderby c.CompanyName
                        select new { c.CompanyName, c.Contact, c.IsPreferred };
于 2014-12-09T22:09:49.187 に答える