20

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;
4

8 に答える 8

29

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;
于 2011-05-16T09:04:16.837 に答える
16

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

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();
于 2011-05-16T09:02:16.203 に答える
12

First()またはを使用してFirstOrDefault()

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

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

于 2011-05-16T09:02:23.380 に答える
6

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>であるということです。つまり、結果を評価するまで、実際にはクエリが実行されません。これらの拡張メソッドのいずれかを使用すると、クエリがすぐに実行されます。

于 2011-05-16T09:03:53.973 に答える
4

msdn : SingleOrDefault

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

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

于 2011-05-16T09:01:50.263 に答える
2
string str = (
  from c in db.productInfo 
  where c.flavor == "Classic Coke" && c.container == "Can"
  select c.co2Target)
    .Single().columnName;
于 2012-11-19T18:11:41.223 に答える
2

クエリが結果として常に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();
于 2011-05-16T09:05:20.307 に答える
-1

私は SingleOrDefault() を好みます。何も返されない場合は例外をスローしません。MSDN リファレンス

このようにして、そのような場合の安全な状態チェックを行うことができます。

var query = (from c in db.productInfo where c.flavor == "Classic Coke" && c.container == "Can"
                 select c.co2Target).SingleOrDefault();
于 2011-05-16T09:17:33.647 に答える