2017-12-12 20 views
-3

私は結合でLINQクエリを実行しています。私は2つの列の減算を変数AVAILABLECARETに保存しています。linqクエリから単一の値を取得

var query = from r in db.Roughs 
join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
from a in ra.DefaultIfEmpty() 
where r.ROUGHNO == id.ToString() 
select new { AVAILABLECARET=r.CARET - a.CARET }; 

変数にAVAILABLECARETをどうやって得るのですか?

UPDATE

は、私はあなたがしたい場合は、この

decimal values = (from r in db.Roughs 
join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
from a in ra.DefaultIfEmpty() 
where r.ROUGHNO == id.ToString() 
select (r.CARET - a.CARET)).Sum(); 

ようにしなければならないか、単一の値を取得するには、次のよう

var AVAILABLECARET= from r in db.Roughs 
join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
from a in ra.DefaultIfEmpty() 
where r.ROUGHNO == id.ToString() 
select new { AVAILABLECARET=r.CARET - a.CARET }.AVAILABLECARET; 
+0

「変数内」ではありませんか? 'query'はこれの結果の集合を含んでいなければなりません。それぞれの結果はちょうど1つのプロパティ... AVAILABLECARET'を持ちます。あなたの 'query'変数には何が含まれていますか? – David

+0

@David - すぐに実行すると質問が表示される可能性があるので、ToList()を呼び出すことを忘れてしまったと思います。 –

+0

@PranayRana:おそらく、彼は最初に自分の結果を調べたり検証しているかどうか疑問に思います。例えば、彼が 'query.ToString()'をどこかに出力しているのなら、それは確かに実践的なことです。 Visual Studioデバッガは、変数を調べるときに結果を列挙するオプションを提示していました。それが事実であったとしても、OPは確かにその代わりに*を求めていたはずです。私はあなたが正しい推測をしていると思いますが、将来の読者のために、違ったことを推測するかもしれませんが、OPが明らかにできるならそれは素晴らしいでしょう。 – David

答えて

1

をそれを把握することができました一番上に行く

decimal? val = (from r in db.Roughs 
join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
from a in ra.DefaultIfEmpty() 
where r.ROUGHNO == id.ToString() 
select (r.CARET - a.CARET)).FirstOrDefault(); 

あなたはT、あなたが期待しているタイプで置き換え得る結果を取得し、ここでは変数の型としてIEnumerable<T>を利用します、あなたのクエリにToList()を試してみてください。あなたが外部結合をしているクエリごとに


あなたは、変数の型は、その後intであれば、それは、exaple以下のようにようになるdecimal型に

IEnumerable<decimal> values = (from r in db.Roughs 
join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
from a in ra.DefaultIfEmpty() 
where r.ROUGHNO == id.ToString() 
select (r.CARET - (a == null ? 0 : a.CARET))).ToList(); 

を想定して、試してみてください

私のポイントはあなたがあなたが期待しているタイプなので、あなたは、それはタイプによってあなたがIEnumerable<T>ここでTは置き換えIEnumerable<deimal>

LINQクエリのリターンになりますより小数をexpection場合トン、あなたはexpcetionであり、あなたは結果を取得し、immedicatlyクエリを実行するToList()機能を必要としています。

+1

'IEnumerable 'または 'IEnumerable 'はそのままで、 'select'は匿名オブジェクトを作成するため使用できません。 'select'は匿名オブジェクト部分を削除するか、結果を' IEnumerable 'に入れます。 –

+0

@ PeterB - 彼は( - )マイナス操作を列にしているので、10進数、整数または浮動小数点数のような数値型になると仮定しています.Yiはあなたが予想している型に置き換えます。 –

+0

@PeterB - 私は彼が実際の戻り値のリストを見ていない理由をToList()が忘れてしまったと思います。それは問題です。 –

0

このような変数に値を割り当てることができます。あなたの質問の後にこの行を入れてください。

var value =query.FirstOrDefault(); 
+0

は、なぜ最初に失敗したのか、リスト –

1

あなたは.ToList()を使用することができ、そして匿名オブジェクトを作成しない方がよいので、new {...}一部をドロップすることがあります。

var values = 
    (from r in db.Roughs 
    join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
    from a in ra.DefaultIfEmpty() 
    where r.ROUGHNO == id.ToString() 
    select r.CARET - a.CARET 
).ToList(); 

これはどんなタイプあなたのキャレットのフィールドに応じて、あなたにList<someNumericType>を与えますがある可能性があり。

(いずれかが存在しない場合はnull)あなただけの最初の値が必要な場合:

var value = 
    (from r in db.Roughs 
    join a in db.Assorts on r.ROUGHNO equals a.RFNO into ra 
    from a in ra.DefaultIfEmpty() 
    where r.ROUGHNO == id.ToString() 
    select r.CARET - a.CARET 
).FirstOrDefault(); 

これはあなたのキャレットフィールドが持つかもしれないあらゆる種類に応じて、Nullable<someNumericType>を生成します。

+0

は外部結合です... "a"がnull vlaueと一緒に来る可能性があります。あなたもそのケースを処理する必要があります –

+0

あなたは正しいですが、それでも私はそれを放棄します。質問があった。 –

関連する問題