繁体   English   中英

Linq to SharePoint具有独特的结果

[英]Linq to SharePoint with Distinct Results

我正在按字母顺序搜索过滤器,并希望从列表中获取结果,并且仅根据列表中的结果显示可用的字母过滤器。 现在棘手的部分是,所需的列是人员字段,我只想获取该人员姓名的首字母。

现在,我可以使用以下代码查询字母,但是谁想要运行26个查询并降低页面加载速度。 此外,所有结果都将显示以字母a开头的用户。 因此,我想我可以做一个限制,使其仅返回一个结果(如果这是唯一的选择)。

SPList UserActivity = web.Lists["User Activity"];

var varUserActivity = (from SPListItem UserActivityItem in UserActivity.Items
                    where UserActivityItem["Username"].ToString().Substring(UserActivityItem["Username"].ToString().IndexOf('#') + 1, (UserActivityItem["Username"].ToString().Length - UserActivityItem["Username"].ToString().IndexOf('#')) - 1).ToLower().Replace("domain\\","").StartsWith("a")
                    select UserActivityItem);

foreach (SPListItem uaitem in varUserActivity)
{
    this.Controls.Add(new LiteralControl(uaitem["Username"].ToString() + "<br>"));
}

但是我更喜欢运行一个查询,为每个唯一字母返回一个结果。 使用此列表示例数据:

  1. DOMAIN \\ Terra Branford
  2. DOMAIN \\ Locke Cole
  3. DOMAIN \\ Sabin Figaro
  4. DOMAIN \\ Setzer Gabbiani
  5. DOMAIN \\ Cyan Garamonde
  6. DOMAIN \\ Celes Chere
  7. DOMAIN \\ Cid Marquez

...预期返回的结果是:

  1. DOMAIN \\ Terra Branford
  2. DOMAIN \\ Locke Cole
  3. DOMAIN \\ Sabin Figaro
  4. DOMAIN \\ Cyan Garamonde

从这里,我可以使用以下字母构建过滤器:CLRS。所以我的问题是如何创建一个独特的Linq查询,该查询返回基于第一个字母的结果?

所以我想通了:

  1. 使用/14/bin/SPMetal.exe将站点URL导出到DataContext类文件中
  2. 将该* .cs类文件导入到您的项目中(在/ 14 / bin /中查找)
  3. 添加参考
  4. 使用您的DataContext启动Linq to SP
  5. 查询您内心的满足感

这是表数据的示例:

  1. DOMAIN \\ Terra Branford
  2. DOMAIN \\ Locke Cole
  3. DOMAIN \\ Sabin Figaro
  4. DOMAIN \\ Setzer Gabbiani
  5. DOMAIN \\ Cyan Garamonde
  6. DOMAIN \\ Celes Chere
  7. DOMAIN \\ Cid Marquez

这是数据过滤代码:

using System.Linq;
using Microsoft.SharePoint.Linq;

MyDataContext dc = new MyDataContext("http://localhost");
var varUserActivity = (from item in dc.UserActivityList
                       orderby item.UsernameName.ToString().Substring(item.UsernameName.ToString().IndexOf('#') + 1, 1).ToLower().Replace("domain\\", "") ascending
                       select new { letter = item.UsernameName.ToString().Substring(item.UsernameName.ToString().IndexOf('#') + 1, 1).ToLower().Replace("domain\\", "") }).Distinct();

foreach (var uaitem in varUserActivity)
{
    this.Controls.Add(new LiteralControl(uaitem.letter + "<br>"));
}

因此,此代码中发生的事情是查询列表中的单个人员列,剥离域,返回帐户名的第一个字母,升序排序并返回不同的字母。 因此,上面的表数据的结果将显示:

  1. C
  2. s
  3. Ť

这非常适合制作字母过滤器。 我不确定它是否在进行真正的数据过滤,但是可以肯定的是,它可以按字母顺序进行26个不同的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM