Linqの新機能、
linqを使用して単一の結果を取得する最も簡単な方法は何ですか?
例、私のクエリ
var query =
from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target;
double値を持つ単一のフィールドのみを返す必要があります。クエリから取り出すにはどうすればよいですか?以前は、ExecuteScalarを使用していました。どうすればlinqを使用できますか?そのデータ型を保持したい
更新:
ここが私です。問題は、ここで実行されているテストクエリが3.75ではなく4を返すことです。
var query =
(from a in db.LUT_ProductInfos
where a.flavor == "Classic Coke" && a.Container == "Can"
select new { a.co2High }).Single();
double MyVar = query.co2High.Value;
1つのレコードではなく1つの値を返すということですか?あなたがする必要がありますselect new {}
次のように:
var query =
from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select new { c.co2Target };
次に、それだけでなく単一のレコードのみを取得したい場合:
var query =
(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select new { c.co2Target }).Single();
取得は次のように行われます。
var query =
(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select new { c.co2Target }).Single();
double MyVar = query.co2Target;
.Single()
または.SingleOrDefault()
拡張メソッドを使用します。
var query =
(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target).Single();
First()
またはFirstOrDefault()
を使用する
_var query =
(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target).FirstOrDefault();
_
結果が1つしかないことがわかっている場合、または複数の結果がある場合に失敗する場合は、Single()
またはSingleOrDefault()
のみを使用してください。
Single
拡張メソッドを使用できます。
var result =
(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target).Single();
他の関連する拡張メソッドは SingleOrDefault
、 First
および FirstOrDefault
です。
SingleとFirstの違いは、クエリが複数の結果をもたらす場合、Singleは例外をスローすることです。 OrDefaultのバリエーションは、クエリによって結果が返されなかった場合はnull
を返しますが、SingleとFirstは結果が存在しない場合は例外をスローします。
Entity Framework 3.5を使用している場合は、Single
をサポートしていないため、First
を使用する必要があります。
注意すべきもう1つの点は、元のコードがIQueryable<T>
は、結果を評価するまで実際にクエリを実行しないことを意味します。これらの拡張メソッドのいずれかを使用すると、クエリがすぐに実行されます。
クエリが結果として常に1つの要素のみを返す場合はSingleOrDefault()
を使用します。クエリの結果が複数の要素である場合は例外がスローされます。
_(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target).SingleOrDefault();
_
結果が複数の要素であり、そのいずれかが必要な場合は、FirstOrDefualt()
を使用します。
_(from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target).FirstOrDefault();
_
string str = (
from c in db.productInfo
where c.flavor == "Classic Coke" && c.container == "Can"
select c.co2Target)
.Single().columnName;