【发布时间】:2021-04-02 09:54:21
【问题描述】:
我有一个如下所示的数据表:
type | Value
----------
a | 5
b | 6
c | 10
d | 23
e | 8
我有一个存储某些类型的列表,如下所示:
var list = new List<string>() {a, c, e}
我不太擅长 LINQ,但我正在寻找一个返回列表中类型的最大值的语句。谁能帮我解决这个问题?
谢谢!
【问题讨论】:
我有一个如下所示的数据表:
type | Value
----------
a | 5
b | 6
c | 10
d | 23
e | 8
我有一个存储某些类型的列表,如下所示:
var list = new List<string>() {a, c, e}
我不太擅长 LINQ,但我正在寻找一个返回列表中类型的最大值的语句。谁能帮我解决这个问题?
谢谢!
【问题讨论】:
试试这个:
int maxValue = list.Max(m =>
dt.AsEnumerable()
.First(r => r.Field<string>("type") == m)
.Field<int>("value")
);
【讨论】:
尝试以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication186
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("type", typeof(string));
dt.Columns.Add("Value", typeof(int));
dt.Rows.Add(new object[] { "a", 0 });
dt.Rows.Add(new object[] { "b", 0 });
dt.Rows.Add(new object[] { "c", 0 });
dt.Rows.Add(new object[] { "d", 0 });
dt.Rows.Add(new object[] { "e", 0 });
dt.Rows.Add(new object[] {"a",5});
dt.Rows.Add(new object[] {"b",6});
dt.Rows.Add(new object[] {"c",10});
dt.Rows.Add(new object[] {"d",23});
dt.Rows.Add(new object[] {"e",8});
List<DataRow> max = dt.AsEnumerable()
.OrderByDescending(x => x.Field<int>("Value"))
.GroupBy(x => x.Field<string>("type"))
.Select(x => x.FirstOrDefault())
.ToList();
}
}
}
【讨论】:
你可以使用类似的东西:
int maxValue = list.Max(m =>
dt.AsEnumerable()
.First(r => r.Field<string>("type") == m)
.Field<int>("value")
);
【讨论】: