[英]How to make SelectMany without argument work for generic IEnumerable<T>
[英]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.