2011-01-05 7 views
1

溶液中では、私は別のプロジェクトでは、クラスがたIUserを実装ユーザーを実装し、インタフェースクラスたIUserを持ってきました。C#のLINQ:サポートされていないタイプ

指定された型のメンバ「ユーザー名」はエンティティへのLINQでサポートされていません。たIUserオブジェクトに対してLINQクエリを実行

は私に次の例外がスローされます。初期化子、エンティティメンバー、エンティティナビゲーションプロパティのみがサポートされています。

この問題を解決するのに手伝ってもらえますか?よろしく

Sample query(Users() returns IQueryable<IUser>: 
var c= (from user in bank.Users() 
          where user.Username == "anUser" 
          select user); 

ここにいくつかのコードの下:あなたのUserNameプロパティは、setアクセサを持っていない

//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(); 
. 
. 
. 
. 
}  

答えて

2

あなたの財産は、setアクセサが実装されていない場合は、Entity Frameworkのは、そのエンティティにプロパティの値を設定することはできません:)

あなたはユーザ名のセッターを定義する必要があります、これは行うことができますあなたの具体的なクラスで。

0

私はこれを使って、ToArray()を使用しました。AsQueryable();私のIQueryableの結果では、この例では、メソッドbank.Users()のすぐ右側にあります。とにかくあなたの助けのための

おかげ

よろしく

+0

あなたはそれがデータベースからあなたの全体のテーブルからすべての行を取得し、配列にキャストします。次に、インデックスのないメモリ配列のクエリを実行します。 Linq to Objectsは任意のフィールドを使用することができます。そのため、readonly UserNameアクセサを使用して基礎となるuser_nameフィールドにアクセスすることができます。ユーザーテーブルが大きくなると、アプリケーションが強制終了されます。 –

関連する問題