使用LINQ选择具有不同列值的行

4

我有一个SharePoint列表项的通用列表(员工名单)

SharePoint列表包含两列,“员工姓名”和“员工职务”

我想要获取一个对象列表,其中包含不同的“员工职务”列值。

如何使用LINQ实现这个目标?

以下方法对我没有起作用:

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

7

如果您只获取该列的字符串值,可以通过选择一个字符串(而不是包含字符串属性的对象)来避免编写等式比较器。

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

您如何获取仅用户有权查看的项目? - JAck28
@JAck28,事实证明,无论使用哪种API(Web、SOAP、ODATA、Server OM、CSOM、ODBC等),SharePoint都会尊重权限设置。这意味着用于获取集合“employees”的任何查询都已经进行了安全修剪。唯一可能不成立的情况是,如果您使用SPSecurity.RunWithElevatedPermissions()来绕过最终用户的安全权限。干杯! - kbrimington

2

您需要在序列上使用Distinct方法,并且需要提供自定义的IEqualityComparer<T>实现,因此您需要为您创建的对象编写一个显式类。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接