0

私はこれに数日間苦労していて、困惑しています。私は誰かが別の提案を提供できることを望んでいます。基本的に、私はLinqToExcelを使用してExcelからデータを読み取っています。ただし、「評価」が「NR」のすべての行を除外したいと思います。これが私のデータのサンプルです:

CompanyName Rating  SalesMan
Apple       2       Steve
Google      NR      Steve
Microsoft   3       John
Dell        1       Steve
Pepsi       3       John

スティーブに所属しているが、評価が「NR」ではないすべての企業を検索したいだけです。私の最終的なリストは次のようになります。

CompanyName SalesMan
Apple       Steve
Dell        Steve

次のコードを試しましたが、機能しません。

1)

var masterList = masterDataXL.Worksheet("data_all").Where(d => !d["Rating"].Equals("NR"));

2)

var masterList = masterDataXL.Worksheet("data_all")
    .Where(m =>
        !m["Rating"].Equals("NR")
        &&
        m["SalesMan"].ToString().Contains(resAnLastName)) // check for last name
    .Select(m => new ResAnTicksDataClass
    {
        Company = m["CompanyName"],
        Rating = m["Rating"],
        Seller = m["SalesMan"]
    }).AsEnumerable();

3)評価用のプロパティを作成し、次のことを行いました。

var masterList = masterDataXL.Worksheet("data_all")
.Where(m =>
    m["Analyst"].ToString().Contains(resAnLastName)) // check for last name
.Select(m => new ResAnTicksDataClass
{
    Company = m["CompanyName"],
    Rating = m["Rating"],
    Seller = m["SalesMan"]
}).AsEnumerable();
var dataList = (from m in masterList
where m.Rating != "NR"
select new ResAnTicksDataClass
{
    ResAnName = m.ResAnName,
    DescrTick = m.DescrTick
}).AsEnumerable();

私は完全に困惑しているので、あなたが持っているかもしれない他の提案を受け入れます。よろしくお願いします。

4

2 に答える 2

4

Excelファイルの[評価]列を選択し、選択範囲を検索して置換し(「NR」を「0」に変更)、フィルタリングすることをお勧めします。単一のデータ型の使用に役立つはずです。

phoogが言ったように、Excelファイルをテーブルに変換するには、そのテーブルで各列のタイプを指定する必要があります。そのためには、Excelファイルの最初の10行のみが表示されます。したがって、ファイルの最初の10行に「NR」値がない場合、列タイプがに設定さINTれるため、値「NR」の変換に失敗します。これを修正する簡単なトリックは、Excelファイルの最初のデータ行の直前に、使用するデータ型を使用するデータを含む行を追加することです。

たとえば、列がテキスト値を使用していて、テキストが255を超える文字を使用している場合は、最初の10行に256文字を使用して少なくとも1つのテキスト値があることを確認してください。それ以外の場合、テーブルを作成すると、列はのVARCHAR(255)代わりに設定されVARCHAR(MAX)、255文字を超えるテキストの変換中にクラッシュします。

結論:最初の10行が、Excelファイルのすべての行に合うように正しいタイプとサイズを使用していることを常に確認してください。

于 2012-09-28T17:24:52.983 に答える
0

最初のサンプルでは、​​これを変更する必要があります。

d => !d["Rating"].Equals("NR")

これに:

d => d["Rating"] != "NR"

よりクリーンな方法で書くこともできます。

var masterList = 
    from d in masterDataXL.Worksheet("data_all")
    where d["Rating"] != "NR"
    select d;
于 2012-09-28T14:49:14.953 に答える