C# 在通过WCF RIA查询返回字符串之前,服务器是否对字符串执行后处理?

C# 在通过WCF RIA查询返回字符串之前,服务器是否对字符串执行后处理?,c#,silverlight,linq-to-entities,wcf-ria-services,domaindatasource,C#,Silverlight,Linq To Entities,Wcf Ria Services,Domaindatasource,我已经读到,在处理WCF RIA服务时,您可以将业务规则放在服务器上,但我不知道如何完成我的任务。基本上我拥有的是,数据库中存储了一个加密的字符串。我有一个返回该列的视图,我希望它未加密地返回给客户端。我有一个标准的DomainService获取方法 public IQueryable<qry_ClientList> GetQry_ClientList(Guid Key) { return this.ObjectContext.qry_ClientLi

我已经读到,在处理WCF RIA服务时,您可以将业务规则放在服务器上,但我不知道如何完成我的任务。基本上我拥有的是,数据库中存储了一个加密的字符串。我有一个返回该列的视图,我希望它未加密地返回给客户端。我有一个标准的DomainService获取方法

    public IQueryable<qry_ClientList> GetQry_ClientList(Guid Key)
    {
        return this.ObjectContext.qry_ClientList.OrderBy(p => p.ClientCode);
    }
public IQueryable GetQry\u客户端列表(Guid键)
{
返回this.ObjectContext.qry_ClientList.OrderBy(p=>p.ClientCode);
}

有人能给我指出正确的方向吗?在返回之前,我如何调用该字段上的解密函数?我有一个原因,我想在代码中而不是在服务器上这样做,但我不在这里讨论。

首先将实体具体化为列表,运行函数,然后将列表转换回IQueryable,然后返回:

public IQueryable<qry_ClientList> GetQry_ClientList(Guid Key)
{
    List<qry_ClientList> clients = 
        this.ObjectContext.qry_ClientList.OrderBy(p => p.ClientCode).ToList();
    foreach (qry_ClientList c in clients) {
        Decrypt(c);
    }
    return clients.AsQueryable;
}
public IQueryable GetQry\u客户端列表(Guid键)
{
列出客户端=
this.ObjectContext.qry_ClientList.OrderBy(p=>p.ClientCode.ToList();
foreach(客户机中的客户列表c){
解密(c);
}
返回clients.AsQueryable;
}

您可以通过覆盖DomainService.Query()方法来进行后处理,如下所示:

public override System.Collections.IEnumerable Query(QueryDescription queryDescription, out IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> validationErrors, out int totalCount)
{
    IEnumerable result = base.Query(queryDescription, out validationErrors, out totalCount);

    // now you have collection with all client query operators applied and
    // you can apply post-processing
    if (queryDescription.Method.Name == "GetQry_ClientList")
    {
        result.OfType<qry_ClientList>().ToList().ForEach(c => Descrypt(c));
    }

    return result;
}
public override System.Collections.IEnumerable查询(QueryDescription QueryDescription,out IEnumerable validationErrors,out int totalCount)
{
IEnumerable result=base.Query(queryDescription,out validationErrors,out totalCount);
//现在,您已经应用了所有客户端查询运算符,并且
//您可以应用后处理
if(queryDescription.Method.Name==“GetQry\u ClientList”)
{
ForEach(c=>Descrypt(c));
}
返回结果;
}

您真的需要对整个集合进行后处理吗?从方法签名(未使用的参数
Guid key
)来看,它似乎应该只返回一个
qry_ClientList
实体,而不是
IQueryable
@JozefBenikovský未使用的参数是身份验证密钥。这个系统连接到一个非常旧的自定义身份验证系统,为了简单起见,我取出了涉及该系统的代码,但忘记删除参数。