1

次の例を考えてみましょう。すべての例で、既知の ID を持つ州/州のコードと名前を、"CA-California" のような形式の単一の文字列変数に取得しようとしています。

string stateName = _repository.States.Single(s => s.StateId == stateId).Name;
string stateCode = _repository.States.Single(s => s.StateId == stateId).Code;
string stateCodeName = stateCode + "-" + stateName;


var state = _repository.States.Single(s => s.StateId == stateId);
string stateCodeName = state.Code + "-" + state.Name;  


string stateCodeName = _repository.States.Where(s => s.StateId == stateId)
                                         .Select(s => s.Code + "-" + s.Name)
                                         .First();

最初の例では、状態の必要なプロパティのみが取得されますが、2 つの異なるクエリを実行するコストがかかります。2 番目の例では、1 つのクエリのみを実行しますが、状態のすべてのプロパティを取得します。3 番目の例は問題ないようですが、私の質問は、Single および First メソッドを使用して、オブジェクト (またはテーブルの列) から任意の数のプロパティを取得する方法があるかどうかです。一つずつ?

ありがとうございました

4

2 に答える 2

1

私の質問は、Single メソッドと First メソッドを使用して、一度にすべてまたは 1 つだけを取得するのではなく、オブジェクト (またはテーブルの列) から任意の数のプロパティを取得する方法があるかどうかです。

これを行うには、匿名型を使用できます。

var state = _repository.States.Where(s => s.StateId == stateId)
     .Select(s => new { Code = s.Code, Name = s.Name })
     .First();

これにより、 と の 2 つのプロパティを持つ匿名型が返されCodeますName

(使用するかどうかFirst()Single()、複数の一致がある場合にプログラムをどのように動作させたいかによって異なります。複数の一致があるSingle()場合は、例外がスローされます。)

于 2012-12-26T18:06:28.373 に答える
0

First()3 番目の例でtoの使用を変更すると、Single()探しているクエリが正確に得られます。

クエリは、期待する単一の結果のみを返し、関心のあるフィールド (既に連結されている) のみを返します。

于 2012-12-26T18:03:18.753 に答える