【问题标题】:Search for an integer item in a datatable with string column values在具有字符串列值的数据表中搜索整数项
【发布时间】:2017-01-18 15:01:40
【问题描述】:

我有一个列数据类型为字符串的数据表。

DataTable dt = new DataTable();
dt.Columns.Add("LowerRange", typeof(string));
dt.Columns.Add("UpperRange", typeof(string));
DataRow dr = dt.NewRow();
dr["LowerRange"] = "1,2,3,4,5"; 
dr["UpperRange"] = "55"; 
dt.Rows.Add(dr);

dr = dt.NewRow();
dr["LowerRange"] = "6,7,8,9,10";
dr["UpperRange"] = "66";
dt.Rows.Add(dr);

我有一个整数列表。

List<int> lstEff = new List<int>() { 4,5,6,7 };

在整数列表中的项目中,我想找出数据表中列表中有一个或多个匹配项的列值。并且必须采取最低的匹配。

在这种情况下,我应该得到对应于“1,2,3,4,5”的行号。

我不能使用Contains,因为如果行中的值为 55,而我正在搜索 5,它将返回 true。我想使用 linq 进行整数搜索。

我是 linq 的新手。我尝试了类似的方法,但出现错误。

foreach (int i in lstEff)
{
    dt.AsEnumerable().Where(c => c.Field<string>("LowerRange").Split(',').ToList<int>().Contains(i.ToString()));
}

【问题讨论】:

  • 乍一看应该是Split(',')带引号
  • 是的.. 将字符串转换为整数列表时出错.. Split(',').ToList() 我认为这部分
  • 你遇到了什么错误?

标签: c# linq datatable


【解决方案1】:

String.Split 为您提供字符串列表。您应该将它们的值从字符串转换为整数,然后进行比较。先转换为列表,你会通过FindIndex得到rowindex:

var rowNo=
    dt.AsEnumerable().ToList().FindIndex(c => c.Field<string>("LowerRange").Split(',').Select(rangeItemStr=>int.Parse(rangeItemStr)).Any(rangeItem=>lstEff.Contains(rangeItem)));

要同时获取行和行索引,我会推荐这样的东西

var rows= dt.AsEnumerable().ToList();
var rowIndex = rows.FindIndex(c => c.Field<string>("LowerRange").Split(',').Select(rangeItemStr=>int.Parse(rangeItemStr)).Any(rangeItem=>lstEff.Contains(rangeItem)));
var row = rows[rowIndex];

【讨论】:

  • 谢谢,没注意细节:)
  • var exists = dt.AsEnumerable().Where(c => c.Field("LowerRange").Split(',').Select(rangeItemStr => int.Parse( rangeItemStr)).Any(rangeItem => rangeItem == i));
  • 你会得到rowNo变量中的行号,然后你就可以找到该行并为所欲为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2018-09-26
  • 2021-03-02
  • 1970-01-01
相关资源
最近更新 更多