ich einige Unternehmen haben Logging
die ILogging
implementiert, lassen Sie uns sagen, dass es nur zwei Eigenschaften hat:Allgemeine Klasse mit Ausdrücken wirft Fehler in Linq-To-Entities
public partial class Logging : ILogging
{
public int ID {get; set;}
public string Name {get; set;}
}
public interface ILogging { int ID {get; set;} }
ich ursprünglich eine statische Klasse Logging.Q
hatte die statische Expression<Func<Logging,bool>>
enthält Felder, aber jetzt möchte ich in der Lage sein, die Ausdrücke für ILogging
zu schreiben, wenn sie nur ID
brauchen:
public partial class Logging
{
public static Q<T> where T : ILogging
{
public static Expression<Func<T,bool>> IDOne = l => l.ID == 1;
}
}
wenn ich den Ausdruck wie folgt aufrufen:
var log = ctx.Logging.Where(Logging.Q<Logging>.IDOne).FirstOrDefault();
ich die berüchtigten "Linq zu Entitäten unterstützt nur ...":
kann nicht den Typ 'Entities.Logging' eingeben 'Entities.ILogging' werfen. LINQ to Entities unterstützt nur das Importieren von EDM-Primitiv- oder Aufzählungstypen.
Aber ich weiß nicht warum. Ich definiere meinen generischen Typ auf der Klasse Q
, also sollte es bekannt sein, dass es sich um Logging
handelt und nicht um ILogging
. Gibt es einen Weg dazu?
wie die ursprüngliche Definition von Logging-Klasse kommt nicht mit dem Stichwort Teil markiert oder ist es nur weggelassen hier – TYY
@TYY Bearbeitete es in –
Ich weiß nicht, ob dies Ihr Problem lösen wird, aber zu einem bestimmten Zeitpunkt erinnere ich mich daran, Klasse zu der Einschränkung hinzuzufügen. Also ich hatte wo T-Klasse, ILogging – TYY