在数据表中搜索字符串列值为

时间:2017-01-18 15:01:40

标签: c# linq datatable

我有一个数据表,其中列数据类型是字符串。

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()));
}

1 个答案:

答案 0 :(得分:1)

String.Split为您提供字符串列表。您应该将它们的值从字符串转换为int并在之后进行比较。首先转换为列表,然后您将通过FindIndex获取rowindex:

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

要获得row和rowIndex,我会建议像这样

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];