Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
123 views
in Technique[技术] by (71.8m points)

c# - How to query on a generic model using EF 6

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

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

1 Reply

0 votes
by (71.8m points)

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...