在一個解決方案,我已經有了一個接口類IUSER和,在另一個項目中,一類實施用戶實施IUSER。C#LINQ到實體:不支持的類型
上IUSER對象執行LINQ查詢我拋出以下異常:
指定的類型成員「用戶名」在LINQ是不支持的實體。僅支持初始化程序,實體成員和實體導航屬性。
你能幫我解決這個問題嗎?順祝商祺
Sample query(Users() returns IQueryable<IUser>:
var c= (from user in bank.Users()
where user.Username == "anUser"
select user);
這裏下面的一些代碼:
//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();
.
.
.
.
}
當你將其轉換爲一個數組它從數據庫整個表中檢索所有行。然後你對沒有索引的內存數組運行查詢。 Linq to Objects可以使用任何字段,因此它可以使用只讀的UserName訪問器訪問基礎的user_name字段。如果你的用戶表變大,這將殺死你的應用程序。 – 2011-01-06 05:42:55