加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用Linq to Entities动态检索某些子类型的所有记录?

发布时间:2020-12-15 21:08:57 所属栏目:百科 来源:网络整理
导读:我试图获取指定类型的数据库中的所有对象的列表.我之前在编译时知道类型时已经这样做了,但是现在我试图将一个类型传递给方法并让方法返回该指定类型的所有记录,而我无法使其工作.我尝试过以下方法: public IListWritingObject GetBasicObjectsByProject(int
我试图获取指定类型的数据库中的所有对象的列表.我之前在编译时知道类型时已经这样做了,但是现在我试图将一个类型传递给方法并让方法返回该指定类型的所有记录,而我无法使其工作.我尝试过以下方法:

public IList<WritingObject> GetBasicObjectsByProject(int projectId,Type oType)
    {
        var results = from o in _objects.AsQueryable
                      where o.Project.Id == projectId
                      && o.GetType() == oType
                      select o;

        return results.ToList<WritingObject>();
    }

这不起作用,因为Linq to Entities不支持GetType()方法.接下来我试过了

var results = from o in _objects.AsQueryable
                      where o.Project.Id == projectId
                      && o is oType
                      select o;

这不起作用,因为编译器声称oType不是已知类型.使用typeof(oType)会产生相同的错误,就像在IQueryable上执行OfType< oType>()一样.

我已经没有想法保持这种动态,而不是将每个子类型分成一个方法.有没有人有任何想法?

解决方法

就像是: ?

var query = from o in _objects.AsQueryable()
            where o.Project.Id == projectId
            select o;

var ofType = typeof (Queryable).GetMethod("OfType").MakeGenericMethod(oType);
var list = (IQueryable)ofType.Invoke(
            null,new object[] {query}).Cast<WritingObject>().ToList();

请注意,这也将包括其他子子类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读