in einer Lösung, die ich habe eine Interface-Klasse bekommt IUser und in einem anderen Projekt, eine Klasse Umsetzung Benutzer Implementierung IUser.C# LINQ to Entities: nicht unterstützter Typ
Ausführen von LINQ-Abfragen auf IUser Objekte wirft mir die folgende Ausnahme:
Der angegebene Typ Mitglied 'Benutzername' ist nicht in LINQ to Entities unterstützt. Es werden nur Initialisierungs-, Entitäts- und Entitätsnavigationseigenschaften unterstützt.
Können Sie mir bitte helfen, dies zu lösen? Mit freundlichen Grüßen
Sample query(Users() returns IQueryable<IUser>:
var c= (from user in bank.Users()
where user.Username == "anUser"
select user);
hier unten einige Code:
//the interface
public interface IUser
{
string Username { get; }
}
// the implementation
public partial class User : IUser
{
public string Bankname
{
get
{
return bank_name;
}
}
// the partial class generated from the entity model
[EdmEntityTypeAttribute(NamespaceName="Database1Model", Name="User")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class User : EntityObject
{
#region Factory Method
/// <summary>
/// Create a new User object.
/// </summary>
/// <param name="user_name">Initial value of the user_name property.</param>
/// <param name="pass_hash">Initial value of the pass_hash property.</param>
/// <param name="is_admin">Initial value of the is_admin property.</param>
/// <param name="bank_name">Initial value of the bank_name property.</param>
/// <param name="is_enabled">Initial value of the is_enabled property.</param>
public static User CreateUser(global::System.String user_name, global::System.String pass_hash, global::System.Boolean is_admin, global::System.String bank_name, global::System.Boolean is_enabled)
{
User user = new User();
user.user_name = user_name;
user.pass_hash = pass_hash;
user.is_admin = is_admin;
user.bank_name = bank_name;
user.is_enabled = is_enabled;
return user;
}
#endregion
#region Primitive Properties
/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String user_name
{
get
{
return _user_name;
}
set
{
if (_user_name != value)
{
Onuser_nameChanging(value);
ReportPropertyChanging("user_name");
_user_name = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("user_name");
Onuser_nameChanged();
}
}
}
private global::System.String _user_name;
partial void Onuser_nameChanging(global::System.String value);
partial void Onuser_nameChanged();
.
.
.
.
}
Wenn Sie es auf ein Array geworfen ruft es alle Zeilen aus der gesamten Tabelle aus der Datenbank. Dann führen Sie eine Abfrage im Speicher-Array ohne Indizes aus. Linq to Objects kann ein beliebiges Feld verwenden. Daher kann es Ihren schreibgeschützten UserName-Accessor verwenden, um auf das zugrunde liegende Feld user_name zuzugreifen. Wenn Ihre Benutzertabelle groß wird, wird Ihre Anwendung dadurch zerstört. –