簡體   English   中英

如何在 lambda 表達式中寫入 not in 子句,其中 not in 包含來自另一個 model 列表的值

[英]How to write not in clause in lambda expression where not in contains value from another model list

我正在嘗試編寫 lambda 表達式來獲取其他 model 列表中存在 Id 的數據。 下面的查詢返回 UserId,它將在另一個表達式中進一步用作過濾數據的鍵。

var _result = authenticationStatus.accountDetails
.GroupBy(m => m.User_Id)
.Select(m =>new AccountDetails {
    User_Id= m.Key,
    IsReg = m.Sum(ta => Convert.ToInt32(ta.IsRegistered)) 
})
.Where(m => m.IsReg > 0)
.ToList();

現在 _result 將具有 userId 屬性,該屬性將進一步用作過濾以下查詢的數據的鍵,但是每當我嘗試使用 User_id 過濾結果時,我在編譯時遇到錯誤-“無法從字符串轉換為 AccountDetail "

var authenticated = authenticationStatus.accountDetails
                        .Where(x=>result.Contains(x.User_Id))
                        .ToList();

注意 -AccountDetail 是 model,下面是 model 表示

public class AccountDetails
{
   public string UserId {get;set;}
   public int IsReg {get;set;}
}

您需要將User_Id與列表中對象的屬性值進行比較,而不是與列表中的對象進行比較。

var authenticated = authenticationStatus.accountDetails
    .Where(x => result.Any(y => y.UserId == x.User_Id))
    .ToList();

如果結果包含 AccountDetails 列表,則 Contains 正在查找 AccountDetails object 而不是鍵。 您可以改用.Any linq 語句。 就像是

var authenticated = authenticationStatus.accountDetails
.Where(x=>result.Any(ad = > string.Equals(ad.UserId, x.User_id))
.ToList();

或者創建字典或哈希集,而不是初始查詢中的列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM