我有一个数据表,其中列数据类型是字符串。
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()));
}
答案 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];