[英]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>"));
}
但是我更喜歡運行一個查詢,為每個唯一字母返回一個結果。 使用此列表示例數據:
...預期返回的結果是:
從這里,我可以使用以下字母構建過濾器:CLRS。所以我的問題是如何創建一個獨特的Linq查詢,該查詢返回基於第一個字母的結果?
所以我想通了:
這是表數據的示例:
這是數據過濾代碼:
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>"));
}
因此,此代碼中發生的事情是查詢列表中的單個人員列,剝離域,返回帳戶名的第一個字母,升序排序並返回不同的字母。 因此,上面的表數據的結果將顯示:
這非常適合制作字母過濾器。 我不確定它是否在進行真正的數據過濾,但是可以肯定的是,它可以按字母順序進行26個不同的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.