3

dbcontext.set で select 句を使用することは可能ですか。次のコードは、db テーブル内の People のすべての共同保険を返し、すべての列を選択します。

public IQueryable<Person> GetPeople()
{
    return DbContext.Set<Person>();                
}

ユーザー名とメールアドレスだけを選択したい

4

4 に答える 4

9
var projection = GetPeople().Select(p => new {p.Username, p.Email});
于 2012-12-04T19:22:20.720 に答える
2

あなたの例とジェイソンの例の両方で、コンテキスト認識オブジェクトを渡しているという事実に注意する必要があります。データをさらに操作すると、データベースに対して予期しないヒットが発生する可能性があります。また、DbContext.Set() のような関数を実行しているときは、EF で最も遅い形式のデータベース呼び出しを実行しています。最速かつ最も効率的なデータベース呼び出しを行うには、次のようにします。

 public List<GetPersonResult> GetPeople()
 {
       return (from p in dbContext.People
              select new GetPersonResult
              {
                   UserName = p.Username,
                   EmailAddress = p.Email
              }).ToList();
 }

 public class GetPersonResult
 {
       public string UserName{get;set;}
       public string EmailAddress{get;set;}
 }

生の SQL は、EF を使用する最速の形式です。生の ADO.NET とほぼ同じ速さ。

于 2012-12-04T19:47:24.020 に答える
1

ここ:

public IQueryable<Person> GetPeople()
{
    return DbContext.Set<Person>().Select(per => new {per.UserName, per.Email})                
}

結果をフィルタリングしたい場合は、次のようなオーバーロードを追加します。

public IQueryable<Person> GetPeople()
{
    return DbContext.Set<Person>().Select(per => new {per.UserName, per.Email})                
}

public IQueryable<Person> GetPeople(int cityId)
{
    return DbContext.Set<Person>().Where(p => p.CityID == cityId)
               .Select(per => new {per.UserName, per.Email})                
}
于 2013-07-19T09:52:55.730 に答える