1

Vs'12、asp.net MVC4 インターネット アプリケーション、EF コード ファースト、MySQL データベース

概要

EPPlusコントローラー レベルからレポートを作成しようとしています。- ユーザーがボタンをクリックすると、プログラムがここに到達します。データベースに情報を照会する必要があります..

説明

私はこの方法を試しました: where intPR=1 as a passed in variable

var pro = from p in db.Prospect
        where p.ProspectID == intPR
        select p;
var cty = from c in db.Countys
        from p in db.Prospect
        where p.ProspectID == intPR
        select c;

次に、このようなものを使用してフィールドに設定します

string x = pro.Select(p => p.ProspectName).ToString();
          ws.Cells["E" + LineFeed].Value = x;

string xx = cty.Select(m => m.County).ToString();
          ws.Cells["E" + LineFeed].Value = xx;

私が得るのは超長いクエリ文字列だけです

"SELECT 
[Extent1]...... You get the hint

質問

値を取得できないのはなぜですか?

4

1 に答える 1

2

LINQ を使用しているため、結果が本当に必要な場合にのみ式が評価されます。select は実際にはIEnumerableorを返すことに注意してくださいIQueryable。クエリを実行するのは、実際に値を使用したい場合のみです。デフォルトのToString()方法では、クエリを出力するだけです。

たとえば、ToList()メソッドを呼び出して、クエリが実行されていることを確認できます。

var prospects = pro.Select(p => p.ProspectName).ToList();

ただし、これはプロスペクトのリストを返し、ToString()-method を呼び出すと、型の名前だけが返されます。リストの最初の項目が必要な場合は、次のようにします。

var firstProspectName = pro.Select(p => p.ProspectName).First():

EDIT:あなたのクエリは、中間のステップなしで、もう少し簡潔に書くことができます:

var firstProspectName = db.Prospect.where(p => p.ProspectID == intPR)
                                   .Select(p => p.ProspectName)
                                   .First();
于 2013-10-03T13:45:21.583 に答える