0

我正在使用 RIA 服务开发应用程序,在我的 DomainService 类中,我拥有 RIA 为一般 CRUD 操作生成的所有标准函数。问题是我尝试创建自己的函数,该函数在 Select 语句中列出所有 45 列,将仅列出 2(NOM 和 PRENOM),并且还根据在 Where 子句中收到的参数。

子句条件运行良好,但代码仍返回所有 45 列,而不是仅返回指定的 2 列。这是代码:

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

在您的域服务中,EmployeDTO 是一个常规的 POCO 类,从客户端的角度来看(silverlight)是一个 RIA 实体。

PS:代码没有经过测试——但我希望你能明白这个想法。

祝你好运。

于 2009-11-17T19:20:53.323 回答