簡體   English   中英

嵌套的Linq查詢返回結果的三倍?

[英]Nested Linq query returns three times the result?

我正在嘗試處理動態數據,並使用LINQ遇到了一些奇怪的事情,這些事情使我在網上找不到太多信息。 我想指出的是,我遇到的這個問題發生在任何嵌套集合上。

我想收集動態數據,然后使用where查詢對其進行過濾。 該查詢只是檢查所有值以查看其是否包含“ FL”,然后我希望它返回動態集合……而不僅僅是包含FL的字段。

我已經在where子句中明確地輸入了類型,以使其更易於在線閱讀,否則就多余了。

        IEnumerable<dynamic> query = from agent in agentRecords
            from values in (ExpandoObject)agent
            where ((KeyValuePair<string, object>)values).Value.ToString().Contains("FL")
            select agent;

該查詢有效,但返回的結果是預期結果的3倍 (我得到9個代理而不是3個重復)。

我可以通過調用distinct來對其進行過濾,但是有一些告訴我我沒有正確執行此操作。

另一種方法是使用LINQ擴展方法

var result = agentRecords.Cast<ExpandoObject>().Where(x => x.Any(y => y.Value.ToString().Contains("FL")));

根據https://docs.microsoft.com/zh-cn/dotnet/csharp/linq/query-expression-basics ,有多個linq查詢“來自/嵌套”的示例,而且似乎沒有遇到這個重復的結果問題...我忽略了什么?

與其對每個代理與其values集合進行交叉聯接,還不如對每個代理進行一次測試:

IEnumerable<dynamic> query = from agent in agentRecords
                             where (from values in (ExpandoObject)agent
                                    select ((KeyValuePair<string, object>)values).Value.ToString().Contains("FL")).Any()
                             select agent;

Lambda語法對我來說似乎更清晰,它看起來與您的表達式相同:

IEnumerable<dynamic> query2 = agentRecords.Where(agent => ((ExpandoObject)agent).Any(((KeyValuePair<string, object>)values).Value.ToString().Contains("FL")));
from a in agentRecords
where (from i in (ExpandoObject)a
       where (((KeyValuePair<string, object>)i).Value.ToString().Contains("FL")
       select i).Count() > 0
select a;

暫無
暫無

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

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