2009-10-07 8 views
0

Je développe une application avec les services RIA, et dans ma classe DomainService, j'ai toutes les fonctions standards générées par le RIA pour les opérations CRUD générales. Le problème est que j'ai essayé de créer ma propre fonction qui instaure la liste de toutes les 45 colonnes dans la déclaration Select, énumérerait seulement 2 (NOM et PRENOM) et aussi selon les paramètres reçus dans la clause Où.Services RIA - Fonction IQueryable avec plusieurs paramètres comme conditions

Les conditions de la clause fonctionnent parfaitement, mais le code renvoie toujours les 45 colonnes au lieu des 2 spécifiées. Voici le code:

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; 
    } 

Merci d'avance.

Répondre

1

Escape from

... tous les 45 clomuns sont retournés !!!

utilisation Data Transfer Objects

Créer une simple classe DTO:

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

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

Créer une fonction simple requête dans votre 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 
       });    
} 

Dans votre service de domaine EmployeDTO est un POCO régulier classe et du point de vue du client (Silverlight) est une entité RIA. PS: Le code n'a pas été testé - mais j'espère que vous avez compris l'idée.

Bonne chance.

Questions connexes