簡體   English   中英

使用linq lambda表達式的查詢列表

[英]query list with linq lambda expressions

我如何獲得列表中的參與者? 我得到了各縣的縣,然后我希望所有參與者都擁有縣名單中的CountyOfParticipationId。

if (collaborationId != null)
{
    var counties = (from c in db.CountyCollaborations
                    where c.CollaborationId == collaborationId
                    select c).ToList();
    participants = participants.Where(p => p.CountyOfParticipationId in counties);


}
participants = participants
.Where(p => counties.Any(c=> c.CountyId == p.CountyOfParticipationId) )

要么

participants.Where(p => p.County.CollaborationId == collaborationId)

如果你已正確建立關系,也應該工作

.Where(p => counties.Contains(p.CountyOfParticipationId))

現在如果有很多數據要小心這個的復雜性。 列表中Contains O(n),因此整體算法為O(n * m),其中n為m,m為參與者數和縣數。

為了獲得更好的性能,您可以將縣存儲在HashSet中,該HashSet具有O(1)Contains,即O(n)整體。

當然,如果縣的數量很少,那真的沒關系。

編輯 :剛才注意到您的列表不包含ids而是包含完整對象。 要使上面的代碼工作,您還需要從select c更改linq查詢以select c.Id或類似的東西(不知道字段的名稱)。

在某些情況下這可能會更好,因為如果linq方法將表達式轉換為場景后面的sql,則不必單獨存儲縣。

participants = (from p in participants 
                  join c in 
                      db.CountyCollaborations
                          .Where(cty=>cty.CollaborationId == collaborationId)
                      on p.CountyOfParticipationId equals c.CountyId
                select p);

假設每個縣都有一個CountyId:

participants = participants.Where( p => 
  counties.Select(c=> c.CountyId ).Contains( p.CountyOfParticipationId) );

暫無
暫無

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

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