[英]Passing a groupfunction to Linq query dynamically
我有一個 linq 查詢,它根據 ID 對列表中的項目進行分組,並對值運行 Min、Max 或 Average 等函數。 請看下面的代碼。
我想要的是能夠動態地將函數 Min、Max 或 Average 等傳遞給這個查詢。 我們如何使用 linq 做這樣的事情?
class ZoneValue
{
public string Id { get; set; }
public string Value { get; set; }
}
static void Main(string[] args)
{
var values = new List<ZoneValue>();
values.Add(new ZoneValue() { Id = "1000", Value = "33" });
values.Add(new ZoneValue() { Id = "1000", Value = "87" });
values.Add(new ZoneValue() { Id = "1000", Value = "29" });
values.Add(new ZoneValue() { Id = "1000", Value = "14" });
values.Add(new ZoneValue() { Id = "2000", Value = "67" });
values.Add(new ZoneValue() { Id = "3000", Value = "33" });
values.Add(new ZoneValue() { Id = "3000", Value = "15" });
values.Add(new ZoneValue() { Id = "3000", Value = "17" });
values.Add(new ZoneValue() { Id = "3000", Value = "67" });
values.Add(new ZoneValue() { Id = "4000", Value = "54" });
values.Add(new ZoneValue() { Id = "5000", Value = "18" });
var result = (from zoneValue in values
group zoneValue by zoneValue.Id into groupResult
select new ZoneValue
{
Id = groupResult.Key,
Value = groupResult.Min(x => Double.Parse(x.Value)).ToString()
}).ToList();
}
只需創建一個Func<T, TResult>
類型的變量並將其傳遞給您的查詢:
Func<IGrouping<string, ZoneValue>, Double> func;
if(condition)
func = group => group.Min(x => Double.Parse(x.Value));
else if(condition2)
func = group => group.Max(x => Double.Parse(x.Value));
else
func = group => group.Average(x => Double.Parse(x.Value));
現在你使用它如下:
var result = (from zoneValue in values
group zoneValue by zoneValue.Id into groupResult
select new ZoneValue
{
Id = groupResult.Key,
Value = func(groupResult).ToString()
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.