Службы RIA - функция IQueryable с несколькими параметрами в качестве условий - PullRequest
0 голосов
/ 08 октября 2009

Я занимаюсь разработкой приложения с помощью RIA Services, и в моем классе DomainService у меня есть все стандартные функции, сгенерированные RIA для общих операций CRUD. Проблема в том, что я попытался создать свою собственную функцию, которая бы перечисляла все 45 столбцов в статистике «Выбор», перечисляла бы только 2 (NOM и PRENOM), а также в соответствии с параметрами, полученными в пункте «Где».

Условия предложения работают отлично, но код по-прежнему возвращает все 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;
    }

Заранее спасибо.

1 Ответ

1 голос
/ 17 ноября 2009

Побег из

... все 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
               });             
}

В вашей доменной службе EmployeDTO - это обычный класс POCO, а со стороны клиента (silverlight) - объект RIA.

PS: код не был проверен - но я надеюсь, что вы поймете идею.

Удачи.

...