1. ホーム
  2. c#

Linq to sql で使用するための空の IQueryable のインスタンス化

2023-11-01 18:49:04

質問

Linqクエリにオプションのパラメータを持たせるか、そのオプションのパラメータをクエリから削除する必要がある場合に、IFのようなものでクエリをvarに割り当てることができるようにする必要があるのです。

もし私がIF文の中でクエリーvarを設定するならば、それを通してループしようとしたとき、varがコンテキストに存在しないことを教えてくれます。

if (whichGroup == "All")
        {
            var listOppLineData = (from o in db.opportunity_vws
                                   where o.fiscal_yr_and_qtr == qtr
                                   select o
                                  );
        }
        else
        {
            var listOppLineData = (from o in db.opportunity_vws
                                   where o.fiscal_yr_and_qtr == qtr && o.Group == whichGroup
                                   select o
                                  );
        }

        foreach (var data in listOppLineData)  //listOppLineData doesn't exist here
        {

IF文の前にvarを設定する必要があると思うのですが、何を設定すればいいのかわかりません。

var listOppLineData = ""; // gives me 
Cannot implicitly convert type 'System.Linq.IQueryable<Forecast.Models.opportunity_vw>' to 'string'

IQueryable listOppLineData = new IQueryable(); //gives me
        Cannot create an instance of the abstract class or interface 'System.Linq.IQueryable'

どのように解決するのですか?

これを試してみてください。

IQueryable<opportunity_vw> listOppLineData;

これは変数を定義しているのですが、初期化を待っている状態です。

また、クエリを見てみると、このように1つで済ませることもできますね。

var listOppLineData = (from o in db.opportunity_vws
                      where o.fiscal_yr_and_qtr == qtr && (o.Group == whichGroup || whichGroup == "All")
                      select o
                      );