web-dev-qa-db-ja.com

c#LINQ:単一の結果を取得する方法

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;
15
Sinaesthetic

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;
25
Tom Gullen

.Single()または.SingleOrDefault()拡張メソッドを使用します。

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();
13
BenCr

First()またはFirstOrDefault()を使用する

_var query =
    (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).FirstOrDefault();
_

結果が1つしかないことがわかっている場合、または複数の結果がある場合に失敗する場合は、Single()またはSingleOrDefault()のみを使用してください。

9
SirViver

Single 拡張メソッドを使用できます。

var result =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();

他の関連する拡張メソッドは SingleOrDefaultFirst および FirstOrDefault です。

SingleとFirstの違いは、クエリが複数の結果をもたらす場合、Singleは例外をスローすることです。 OrDefaultのバリエーションは、クエリによって結果が返されなかった場合はnullを返しますが、SingleとFirstは結果が存在しない場合は例外をスローします。

Entity Framework 3.5を使用している場合は、Singleをサポートしていないため、Firstを使用する必要があります。

注意すべきもう1つの点は、元のコードがIQueryable<T>は、結果を評価するまで実際にクエリを実行しないことを意味します。これらの拡張メソッドのいずれかを使用すると、クエリがすぐに実行されます。

5
Thorarin

msdn: SingleOrDefault

Single()またはSingleOrDefault()メソッドを使用して結果を取得する

また確認してください: デフォルトの拡張メソッド

4
Pranay Rana

クエリが結果として常に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();
_
2
mBotros
string str = (
  from c in db.productInfo 
  where c.flavor == "Classic Coke" && c.container == "Can"
  select c.co2Target)
    .Single().columnName;
1
Asif Rehman