0

以下を含む SQL クエリを実行する古い FoxPro プログラムがあります。

            SELECT  Region,                        
                    Year AS yr_qtr,                  
                    SUM(Stock) AS inventory   

**...

                   COUNT(Rent) AS rent_ct     
            FROM                                         

**...

            GROUP   BY Region, Year           
            ORDER   BY Region, Year
            INTO    CURSOR tmpCrsr

クエリは .DBF テーブル ファイルに対して行われ、Excel ファイルからのデータが含まれます。私は両方を使用して、C# プログラムでユーザー定義オブジェクトの列挙を作成しました。(.AsEnumerable が必要かどうかはわかりません。) 次に、LINQ to Dataset を使用してユーザー オブジェクトのリストをクエリし、同じ結果セットを作成しようとします。

var rslt1 = from rec in recs_list //.AsEnumerable()
            group rec by new {rec.Region, rec.Year} into grp
            select new
{
    RegName = grp.Key.Region,
    yr_qtr = grp.Key.Year,
    inventory = grp.Sum(s => s.Stock),
    // ...
    rent_count = grp.Count(r => r.Rent != null)
};

Rent 列の Count() について、「型 'decimal' の値は型 'decimal' の 'null' と決して等しくないため、式の結果は常に 'true' です」という警告が表示されます。

これは理にかなっていますが、.NULL の値を持つ行を除外してカウントするにはどうすればよいでしょうか。FoxPro テーブルのその列 (または SQL データベース テーブルの NULL) については? 10 進数値の null テストを実行できません。

4

1 に答える 1

1

家賃がnull許容値ではない列に基づいている場合、nullをチェックしても意味がなく、コンパイラが正確に表示すると思います。行を次のように変更します

rent_count = grp.Count(r => r.Rent != 0)

代わりは。

次のように、コードが実際に null 可能である場合:

Decimal? rent; 

これにより、 null に対する家賃のチェックが有効になります。その場合、行は次のようになります。

rent_count = grp.Count(r => (r.Rent ?? 0) != 0)

どこでnull合体演算子?? に使える。r.rent が null の場合は、r.Rent に値 0 (または技術的に必要な任意の値) を使用します。次のプロセスで。

于 2012-11-08T18:49:07.347 に答える