1

これは私のデータベース構造です :
Company
CompanyIDCompanyName
..。

Location
LocationIDLocationName ..。
_

Contact
ContactID
ContactName
ContactEmail

CompanyContact
ContactID
CompanyID
IsActive

LocationContact
ContactID
LocationID
IsActive

これで、これらの各エンティティ(CompanyContact、LocationContact)のリポジトリができました。

public List<Contact> GetCompanyContact(int CompanyID)
{
   return _context.CompanyContacts.Where(p => p.CompanyID == CompanyID).Select(s => s.Contact).ToList();
}
...
public List<Contact> GetLocationContact(int LocationID)
{
   return _context.LocationContacts.Where(p => p.LocationID == LocationID).Select(s => s.Contact).ToList();
}
...

連絡先のリストを取得するためのジェネリックメソッドを作成するにはどうすればよいですか。EntityName(CompanyContactまたはLocationContact)と参照列名(CompanyID、LocationID)を渡します。
私が欲しいものの例:

public List<Contact> GetContact(string EntityName,String ColName){....}
Ex of call .
GetContact("CompanyContact","CompanyID");

ありがとう。

編集
会社は多くの連絡先を持つことができ、場所も多くの連絡先を持つことができます。

4

1 に答える 1

4

おそらく、リポジトリにデータベース コンテキストがあるので、次のように、ラムダのダッシュを使用して少しジェネリックを使用します。

public class MyRepository {
    var _context = new MyEFDatabaseEntities();

    public List<T> GetListOf<T>(Expression<Func<T, bool>> expression)
        where T : class {

        return _context.CreateObjectSet<T>().Where(expression).ToList();
    }
}

この小さなワンライナーで、次のような楽しいことができます。

// first make a repository object
var repository = new MyRepository();

// now I can grab a list of contacts based on CompanyID
var contacts = repository.GetListOf<Contact>(c => c.ContactID == 12345);

// or I can get a list of contacts based on location
var contacts = repository.GetListOf<Contact>(c => c.LocationID == 12345);

// get all contacts for a company
var contacts = repository.GetListOf<CompanyContact>(c => c.CompanyID == 123).Contacts;

// get all confabs for a location
var contacts = repository.GetListOf<LocationContact>(c => c.CompanyID == 123).Contacts;
于 2011-03-01T20:23:36.843 に答える