0

私は RIA サービスを使用してアプリケーションを開発しています。私の DomainService クラスには、一般的な CRUD 操作のために RIA によって生成されたすべての標準関数があります。問題は、Select ステートメントの 45 列すべてを一覧表示する独自の関数を作成しようとしたことです。2 つだけ (NOM と PRENOM) を一覧表示し、Where 句で受け取ったパラメーターに従っても表示されます。

Clause 条件は完全に機能していますが、コードは指定された 2 つだけではなく、45 列すべてを返しています。コードは次のとおりです。

    public IQueryable<EMPLOYE> GetEMPLOYEs(string strPRENOM, string strNOM)
    {
        IQueryable<EMPLOYE> query = this.Context.EMPLOYEs.AsQueryable();

        //This Doesn't work... all 45 clomuns are returned!!!
        query = from e in this.Context.EMPLOYEs select e;
        query.Select(e => new { e.PRENOM, e.NOM });

        // This Doesn't Work too!!!! Error:Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<AffPoste.Web.EMPLOYE>'. An explicit conversion exists (are you missing a cast?)
        //query = from e in this.Context.EMPLOYEs select new{e.PRENOM, e.NOM};

         // Clause Conditions "Where"
         if (!String.IsNullOrEmpty(strPRENOM)) query = query.Where(e => e.PRENOM.Contains(strPRENOM));
            if (!String.IsNullOrEmpty(strNOM)) query = query.Where(e => e.NOM.Contains(strNOM));

        return query;
    }

前もって感謝します。

4

1 に答える 1

1

から脱出する

... 45個のクロムンがすべて返されました!!!

データ転送オブジェクトを使用する

簡単な DTO クラスを作成します。

public class EmployeDTO
{      
    [Key]
    int ID { get; set; }

    public string Prenom { get; set; }
    public string Nom { get;set; }
}

DomainService で簡単なクエリ関数を作成します。

public IQueryable< EmployeDTO > EmployesDTO(string strPRENOM, string strNOM)
{
    var query = this.Context.EMPLOYEs.AsQueryable();

    if (!String.IsNullOrEmpty(strPRENOM)) query = query
              .Where(e => e.PRENOM.Contains(strPRENOM));
    if (!String.IsNullOrEmpty(strNOM)) query = query
              .Where(e => e.NOM.Contains(strNOM));

   return from emp in query  select ( 
               new EmployeDTO () {
                   ID = emp.ID,
                   Prenom = emp.Prenom, 
                   Nom = emp.Nom
               });             
}

ドメイン サービスの EmployeeDTO は通常の POCO クラスであり、クライアント側の観点 (silverlight) は RIA エンティティです。

PS: コードはテストされていませんが、アイデアを理解していただければ幸いです。

幸運を。

于 2009-11-17T19:20:53.323 に答える