2010-09-07 3 views
4

У меня есть общий список списков SharePoint элементов (сотрудников Список)Выбор строк с различными значениями столбцов с помощью LINQ

В списке SharePoint содержит две колонки, «Имя сотрудника» и «Сотрудник Обозначение»

I хотите получить список объектов, в котором содержатся значения столбца «Обозначение сотрудника».

Как это сделать с помощью LINQ?

Это не работали для меня:

var designations = from SPListItem employee in employees 
        select new {Designation = employee["Employee Designation"].ToString().Distinct()}; 

ответ

7

Если вы только получение строкового значения этого столбца, вы можете избежать написаний компаратора равенства путем выбора строки (вместо объекта, содержащее свойство строки).

var designations = (from SPListItem employee in employees 
        select employee["Employee Designation"].ToString()) 
        .Distinct() 
        .ToList(); 
+0

Как вы получите только те товары, которые пользователь имеет разрешение на просмотр? – JAck28

+0

@ JAck28, оказывается, что SharePoint уважает настройки разрешений независимо от того, какой API (Web, SOAP, ODATA, Server OM, CSOM, ODBC и т. Д.) Используется. Это означает, что какой бы запрос не использовался для получения коллекции «сотрудники», уже был обрезан. Единственный случай, когда этот оператор может быть неверным, - это использование SPSecurity.RunWithElevatedPermissions() 'для обхода разрешений безопасности конечного пользователя. Ура! – kbrimington

+0

спасибо за ваше объяснение! – JAck28

2

Вы должны использовать Distinct метод на последовательности, и вам нужно будет предоставить пользовательскую реализацию IEqualityComparer<T>, из-за этого вам потребуется явный класс для объект, который вы создаете.

var designations = (from SPListItem employee in employees 
        select new 
        { 
        Designation = employee["Employee Designation"].ToString() 
        }).Distinct(comparer); 
Смежные вопросы