C# DbContext.Set()上的LINQ
所以,基本上,我试图从实体名称字符串返回一个DbSet。这就是我取得的成绩:C# DbContext.Set()上的LINQ,c#,linq,entity-framework,reflection,C#,Linq,Entity Framework,Reflection,所以,基本上,我试图从实体名称字符串返回一个DbSet。这就是我取得的成绩: var customers = db.Set(Type.GetType("App.Model.Customer, App.Model, Version=1.0.0.0, Culture=neut
var customers = db.Set(Type.GetType("App.Model.Customer,
App.Model,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=null"));
但是我不能像任何一个或一个那样表演其他LINQ。为什么会这样?我怎样才能改变它呢?根据您的需求,不,如果需求改变了,您也许可以解决它。如果在运行时将类型设置为字符串,那么在编译代码之前,您如何相信可以针对它进行编程
静态类型需要静态类型才能工作,您可以使用接口执行一些ninja dynamics来绕过其中的一部分,但您的问题没有提供此类信息。对于您的需求,没有,如果需求发生变化,您可能可以绕过它。如果在运行时将类型设置为字符串,那么在编译代码之前,您如何相信可以针对它进行编程
静态类型需要静态类型才能工作,您可以使用接口执行一些ninja dynamics来绕过其中的一部分,但您的问题没有提供此类信息。非泛型重载返回同样的非泛型。这个类实现的接口之一是IQueryable,同样也是非泛型的。这就是为什么它不能作为泛型类型IQueryable上定义的任何LINQ扩展方法的输入 因此,事实上,如果您仍然想使用LINQ,您只需推迟转换为通用IQueryable的时间。你可以 …这将返回包装在IQueryTable中且CustomerId==1的客户 您甚至可以使用“查找”方法:
这将返回一个客户实例。的非泛型重载将返回一个同样非泛型的实例。这个类实现的接口之一是IQueryable,同样也是非泛型的。这就是为什么它不能作为泛型类型IQueryable上定义的任何LINQ扩展方法的输入 因此,事实上,如果您仍然想使用LINQ,您只需推迟转换为通用IQueryable的时间。你可以 …这将返回包装在IQueryTable中且CustomerId==1的客户 您甚至可以使用“查找”方法:
这将返回单个客户实例。尝试将非泛型IQueryable强制转换为泛型,其中泛型属性是超类,甚至只是对象,例如:
((IQueryable<object>)context.Set(Type.GetType(...))).Count();
这对我有用 尝试将非泛型IQueryable强制转换为泛型,其中泛型属性是超类,甚至只是对象,例如:
((IQueryable<object>)context.Set(Type.GetType(...))).Count();
这对我有用 @Adrian的可能副本似乎你理解这个问题。介意在这里简单解释一下吗?@Md.lbrahim在链接的问题中你不明白什么?这个问题和答案似乎很好地解释了这个问题。总而言之,不能在DbContext.SetTypeVariable上使用Linq,因为它不返回DbSet,而是返回一个DbSet,这意味着没有可以推断用于Linq方法的类型。您可以改为使用DbContext。根据使用反射注入类型的给定答案设置一个调用。然后您就可以使用Linq。@默认情况下,我恐怕没有。我不明白为什么我会关心本地和什么是IActionTarget?如果你能在这里简单地解释一下,会有帮助的。@Adrian的可能副本似乎你理解这个问题。介意在这里简单解释一下吗?@Md.lbrahim在链接的问题中你不明白什么?这个问题和答案似乎很好地解释了这个问题。总而言之,不能在DbContext.SetTypeVariable上使用Linq,因为它不返回DbSet,而是返回一个DbSet,这意味着没有可以推断用于Linq方法的类型。您可以改为使用DbContext。根据使用反射注入类型的给定答案设置一个调用。然后您就可以使用Linq。@默认情况下,我恐怕没有。我不明白为什么我会关心本地和什么是IActionTarget?如果你能在这里简单地解释一下,那会有帮助的。我得到的只是字符串的名称,我必须克服这一点。如果我需要使用dynamic,那就这样吧。在这一点上,任何可行的解决方案都对我有帮助。谢谢。那么您需要某种最小的接口,您知道类型将从中继承吗?你有吗?我现在没有。但这不应该太难。例如,我将让我的模型从一个接口继承。我得到的只是作为字符串的名称,我必须克服这一点。如果我需要使用dynamic,那就这样吧。在这一点上,任何可行的解决方案都对我有帮助。谢谢。那么您需要某种最小的接口,您知道类型将从中继承吗?你有吗?我现在没有。但这不应该太难。例如,我将让我的模型从接口继承。
var customer = db.Set(Type.GetType(...)).Find(1);
((IQueryable<object>)context.Set(Type.GetType(...))).Count();