2016-09-07 2 views
0
TEntity temp = null; 

foreach (TEntity item in _context.Set<TEntity>()) 
{ 
    if (keyPropertyInfo.GetValue(item).ToString() == primaryKey) 
    { 
     temp = item; 
    } 
} 

DataAccessBaseクラスにコードを書き込み、プライマリキーでTEntityを取得したいが、効率が悪いため、_context.Setはテーブルからすべてのレコードを取得します。だから私は試しました:汎用ラムダを使用してデータベースからレコードを読み取る

TEntity temp = _context.Set<TEntity>().Where(e => keyPropertyInfo.GetValue(e).ToString() == primaryKey).FirstOrDefault(); 

しかし、それは働いていない...誰も私を助けることができますか?

答えて

0

あなたは主キーでエンティティを検索したい場合は、単にfindメソッドを使用します。あなたは他のプロパティでそれを見つける必要がある場合は、以下のような関数に式を送ることができます

public TEntity Get<TEntity>(string primaryKey) where TEntity : class 
    { 
     using (var _context = new MyDbContext()) 
     { 
      return _context.Set<TEntity>().Find(primaryKey); 
     } 
    } 

を:

public TEntity Get<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class 
{ 
    using (var _context = new MyDbContext()) 
    { 
     return _context.Set<TEntity>().Where(predicate).FirstOrDefault(); 
    } 
} 

し、それを呼び出すために:

repo.Get<MyModel>(x=>x.SomeProperty == someValue); 
+0

おかげで、それが動作します – Mike

関連する問題