【发布时间】:2016-04-07 18:33:21
【问题描述】:
我有一些实体Logging 实现了ILogging,假设它只有两个属性:
public partial class Logging : ILogging
{
public int ID {get; set;}
public string Name {get; set;}
}
public interface ILogging { int ID {get; set;} }
我最初有一个静态类Logging.Q,其中包含静态Expression<Func<Logging,bool>> 字段,但现在我希望能够为ILogging 编写表达式,如果它们只需要ID:
public partial class Logging
{
public static Q<T> where T : ILogging
{
public static Expression<Func<T,bool>> IDOne = l => l.ID == 1;
}
}
当我这样调用表达式时:
var log = ctx.Logging.Where(Logging.Q<Logging>.IDOne).FirstOrDefault();
我得到了臭名昭著的“linq to entity only supports...”:
无法将类型“Entities.Logging”转换为类型“Entities.ILogging”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
但我不知道为什么。我在Q 类上定义了我的泛型类型,所以运行时应该知道我正在处理Logging 而不是ILogging。有没有办法解决这个问题?
【问题讨论】:
-
Logging 类的初始定义怎么没有用关键字 partial 标记还是这里省略了
-
我不知道这是否能解决您的问题,但在某个时间点,我记得必须将类添加到约束中。所以我有 where T 类,ILogging
-
解决了,谢谢!
标签: c# entity-framework linq generics