Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am developing an MVC 5 application. I query on my database as:

var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);

But what if I want to make a generic method and Don't know the name of the model on compile time. I want to query on any model class that is passed to a method at runtime. Something as :

var result = db.<T>.Where(x => x.Id == Id).ToList();

How can I do that. I am using database first approach and no repositories or UoW.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
118 views
Welcome To Ask or Share your Answers For Others

1 Answer

To do this, you need to give some information about Id property. You can do it creating interface with common for all entities properties:

interface IEntity
{
    int Id {get;}
}

And implement it in your classes:

class ABC : IEntity
{
    int Id {get; set;} 
    string Name {get;set;}
}

List<T> GetData<T>(int id) where T : class, IEntity
{
    var result = db.Set<T>().Where(x => x.Id == Id).ToList();
    return result;
}

...

var data = GetData<ABC>(10);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...