簡體   English   中英

SelectMany無法推斷參數?

[英]SelectMany can't deduce argument?

這是我的查詢:

MyRepeater.DataSource = Objects
    .GroupBy(p => p.FAC_ID)
    .Select(p => p.First())
    .First().Dipartimento.AreeDipartimento
    .SelectMany(p => p.Aree);

但是它說不能使用SelectMany推論參數。

相反,如果我這樣做:

.SelectMany(p => p.Aree.AREA);

有用! 但是我需要Aree (對象)的集合/列表,而不是Aree.AREA (字符串)。

我哪里錯了?

整個查詢對我來說意義不大。 您正在按FAC_ID分組,然后從每個組中任意取任意對象,然后從每個組中任意取一個(無順序)。 您可以更高效,更清晰地獲得同樣的效果:

var obj = Objects.FirstOrDefault();

也許您想要這個(只是猜測):

MyRepeater.DataSource = Objects
    .GroupBy(p => p.FAC_ID)
    .Select(grp => grp.First())  // remove duplicates, keep an arbitrary
    .SelectMany(p => p.Dipartimento.AreeDipartimento.Select(ad => ad.Aree));

這里SelectMany選擇Aree從序列對象Dipartimento.AreeDipartimento和它們所有變平至其被用作單個序列DataSource的中繼器。

如果要連接多個序列,則應使用.SelectMany ,因此參數必須是一個序列。 如果不是這種情況,請堅持使用.Select方法。

有關更多信息,請看這里: Select和SelectMany之間的區別

我認為您想在此處使用Select而不是SelectMany

SelectMany用於在查詢中處理的對象中選擇一個集合。 然后將選定的集合合並到結果中。

例如,如果您得到以下信息:

var a = {Tuple.Create("a", {1, 2, 3}),
         Tuple.Create("b", {4, 5, 6}),
         Tuple.Create("c", {7, 8, 9})}

您可以使用SelectMany來將Tuple Item2中的所有結果值Item2到一個列表中。 a.SelectMany(t => t.Item2)將導致

{1, 2, 3, 4, 5, 6, 7, 8, 9}

另一方面,select用於標記一個結果(我假設這就是您想要的結果。因此a.Select(t => t.Item1)將導致{"a", "b", "c"}a.Select(t => t.Item2)將導致:

{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

所以總的來說,我認為在您的情況下,

MyRepeater.DataSource = Objects.GroupBy(p => p.FAC_ID).Select(p => p.First())
                               .First().Dipartimento.AreeDipartimento
                               .Select(p => p.Aree);

是正確的。 這是我可以給您的所有提示,而無需提供有關數據結構和預期結果的其他信息。

暫無
暫無

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

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