web-dev-qa-db-ja.com

Linq構文-複数の列の選択

これは、エンティティモデルに使用しているLinq構文です。

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

複数の列を選択するにはどうすればよいですか?私もres.IDを選択したいです。そして、どうすればそれらを受け取ることができますか? IQueryableは機能しないと思います。そして、これはLinq to SQLと呼ばれます。

85
Riz

他の回答が示しているように、匿名型を使用する必要があります。

構文に関する限り、私は個人的にメソッドチェーンを好んでいます。同等のメソッドチェーンは次のようになります。

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

私の知る限り、宣言型LINQ構文は、コンパイル時にこれに似たメソッド呼び出しチェーンに変換されます。

UPDATE

オブジェクト全体が必要な場合は、Select()の呼び出しを省略するだけです。

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);
168
Adam Ralph

たとえば、匿名型を使用できます。

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };
69
Ivan Danilov
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

または、使用できます

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

説明:

  1. Dbからresとして従業員を選択します。

  2. Where条件に従って従業員の詳細をフィルタリングします。

  3. 新しい{}を使用して匿名オブジェクトを作成し、従業員オブジェクトから必須フィールドを選択します

3
Bimzee