var result = db.SETUP_MASTER_LOGIN
.Where(x => x.DELETED ==false)
.Select(s => new MasterLoginResp)
{
resource_name = s.RESOURCE_NAME。
user_name = x.USER_NAME,
created_by = x.CREATED_BY。
})
.ToList()
如何從選定的三列中獲得不同的值?我已經嘗試了所有的解決方案,但沒有得到所需的結果。
uj5u.com熱心網友回復:
我認為MasterLoginResp是DTO物件。
public class MasterLoginResp
{
public string resource_name {get; set; }
public string user_name {get; set; }
public string created_by {get; set; }
public override int GetHashCode()
{
return (resource_name user_name created_by).GetHashCode()。
}
}
現在只需使用你的方式。
var result = db.SETUP_MASTER_LOGIN. Where(x => x.DELETED ==false)
.Select(s => new MasterLoginResp{
resource_name = s.RESOURCE_NAME。
user_name = x.USER_NAME,
created_by = x.CREATED_BY。
}).Distinct().ToList()。
注意:這是客戶端的評估,所以它將從服務器帶來所有資料。
uj5u.com熱心網友回復:
這是個懸而未決的問題。Distinct方法應該可以選擇使用一個lambda函式,比如First(), Count()和其他。
源代碼是公開的。檢查它并研究如何做到這一點,以便在可能的情況下保持IQueryable以委托給服務器,我們得出了這段代碼。
using System;
using System.Collections.Generic;
public static class ExtendLinq
{
// <summary>/span>
// 在屬性上執行Distinct操作。
//使用一個回傳的lambda運算式來定義。
//一個物件。
// </summary>/span>
// <tyeparam name="T"></typeparam>
// <param name="list"></param>
// <param name="propertySelector"> </param>
// <returns>/span></returns>
public static IEnumerable< T> Distinct< T>(this IEnumerable<T> list, Func<T, object> propertySelector)
{
return list.GroupBy(propertySelector).Select(x => x.First())。
}
}
然而,First回傳IEnumerable<T>使委托的希望破滅。
然后我們可以這樣做。
我們可以應用這個。
var result = db.SETUP_MASTER_LOGIN
.Where(x => x.DELETED == false)
.Distinct(s => new
{
s.RESOURCE_NAME,
x.USER_NAME,
x.CREATED_BY
})
.Select(s => new MasterLoginResp
{
resource_name = s.RESOURCE_NAME,
user_name = x.USER_NAME,
created_by = x.CREATED_BY
})
.ToList()
鑒于你已經將結果減少到你想應用distinct的列,你可能認為你可以直接使用Distinct()而不使用引數。然而,這可能會直接比較物件。你必須要小心處理這個問題。由于實作的原因,我的方法將始終有效。
注意到我的方法是以 "Distinct() "為基礎的。
注意,我應用了
標籤: 上一篇:C#將httpclientpost轉換為restsharppost,沒有async方法的自動操作
下一篇:如何驗證每個瀏覽器的點擊率?
Distinct 在Select之前減少。這使得它可以對所有的屬性進行操作,而不僅僅是你從Select回傳的那些。
