【问题标题】:How to hide some columns with EF + lambda expression (for WCF QueryInterceptor)如何使用 EF + lambda 表达式隐藏某些列(用于 WCF QueryInterceptor)
【发布时间】:2012-01-18 14:20:16
【问题描述】:

我有一个带有 WCF OData 服务的 Web 应用程序。我有一个名为 Guest 的模型,具有一些属性:Id、FullName、Username、Email...

WCF 数据服务就像一个提要一样工作,所以我想隐藏电子邮件列,但我不知道如何。

public Expression<Func<Guest, bool>> OnQueryGuests()
{
    if (!IsAuthenticated())
        return c => c________;//what should return here???
}

我的临时解决方案是为所有未登录的用户禁用该服务。

【问题讨论】:

标签: entity-framework lambda wcf-data-services interceptor


【解决方案1】:

使用实体框架,您需要将结果投影到子类中,然后告诉 WCF 数据服务该子类是实体。通过拦截 IQueryable 这一切都是可能的。这有点工作,但在 Derrick VanArnam MS Example 的帮助下,我能够创建一个表达式拦截器,它可以修改表达式树以删除不需要的属性绑定。

【讨论】:

    【解决方案2】:

    这就是你所追求的吗?

    return c => c.ToList().Select(item => new { Value1 = item.Value1, Value2 = item.Value2 });

    选择所有列,除了要隐藏在匿名对象中的列..

    【讨论】:

      【解决方案3】:

      如何构建自己的类并将其用作视图模型?

      喜欢

      public class publicUser{
        public int id{get;set;}
        public string name{get;set;}
        //and so on...
      }
      

      你的选择应该是:

      List<publicUser> data = (from c in datasource..
                                                      select new publicUser(){
                                                          name= c.name,
                                                          id= c.id
                                                      }).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        相关资源
        最近更新 更多