Linq到SharePoint具有明显的结果

时间:2014-06-24 16:31:55

标签: c# linq sharepoint sharepoint-2010

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

现在我可以使用以下代码查询一个字母,但是谁想要运行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
  8. ...预期返回的结果是:

    1. DOMAIN \ Terra Branford
    2. DOMAIN \ Locke Cole
    3. DOMAIN \ Sabin Figaro
    4. DOMAIN \ Cyan Garamonde
    5. 从这里我可以使用字母构建我的过滤器:C L R S.所以我的问题是如何创建一个基于首字母返回结果的独特Linq查询?

1 个答案:

答案 0 :(得分:0)

所以我明白了:

  1. 使用/14/bin/SPMetal.exe将站点URL导出到DataContext类文件中
  2. 将* .cs类文件导入项目(在/ 14 / bin /中找到)
  3. 添加参考
  4. 使用DataContext
  5. 启动Linq到SP
  6. 查询您心中的内容
  7. 这是表格数据的一个例子:

    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
    8. 这是数据过滤代码:

      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. 取值
      3. 这非常适合制作字母过滤器。我不确定它是否正在进行真正的数据过滤,但它确实可以通过信件进行26次不同的查询。