微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我试图获取指定类型的数据库中的所有对象的列表.我之前在编译时知道类型时已经这样做了,但是现在我试图将一个类型传递给方法并让方法返回该指定类型的所有记录,而我无法使其工作.我尝试过以下方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐