簡體   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