Как скрыть некоторые столбцы с лямбда-выражением EF + (для WCF QueryInterceptor) - PullRequest
3 голосов
/ 18 января 2012

У меня есть веб-приложение со службой ODF WCF. У меня есть модель под названием Guest с некоторыми свойствами: Id, FullName, Username, Email ...

Служба данных WCF работает как фид, поэтому я хочу скрыть столбцы электронной почты, но не знаю как.

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

Мое временное решение - отключить службу для всех пользователей, не вошедших в систему.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2014

При использовании структуры сущностей вам необходимо спроецировать результаты в подкласс, а затем сообщить WCF Data Services, что подкласс - это сущность.Перехватывая IQueryable, это все возможно.Это немного трудоемко, но с помощью Деррика ВанАрнама MS Пример Мне удалось создать перехватчик выражений, который бы изменял дерево выражений, удаляя привязки ненужных свойств.

1 голос
/ 25 апреля 2014

А как насчет создания собственного класса и использования его в качестве модели представления?

как

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();
1 голос
/ 24 апреля 2014

Это то, что вы ищете?

return c => c.ToList (). Выбрать (item => new {Value1 = item.Value1, Value2 = item.Value2});

Выберите все ваши столбцы, кроме тех, которые вы хотите скрыть в анонимном объекте.

...