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

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...