使用linq根据范围过滤数据

时间:2011-05-31 06:10:13

标签: linq

我有一个数据表,其中包含以下数据

SrNo Roll  Name
1    1     XYZ
99   45    ABC
150  120   POQ
10   9     RTY
190  180   MNZ

根据srNo的范围,输出应该是&应该添加一个额外的列结果&根据范围,结果应填充0或1(如果范围在0-100之间,那么如果范围在100-200之间,则结果应为0,则结果应为1)

所以输出将是

SrNo Roll  Name Result
1     1     XYZ  0
99    45    ABC  0
10    9     RTY  0

150   120   POQ   1

190  180   MNZ    1

我想通过linq实现

请建议任何!!!

由于

1 个答案:

答案 0 :(得分:1)

SrNo    Roll    Name    Result
1       1       XYZ     0
99      45      ABC     0
10      9       RTY     0
150     120     POQ     1
190     180     MNZ     1

试试这个:

var dt = new DataTable();
dt.Columns.Add(new DataColumn("SrNo", typeof (int)));
dt.Columns.Add(new DataColumn("Roll", typeof (int)));
dt.Columns.Add(new DataColumn("Name", typeof (string)));

dt.Rows.Add(1, 1, "XYZ");
dt.Rows.Add(99, 45, "ABC");
dt.Rows.Add(150, 120, "POQ");
dt.Rows.Add(10, 9, "RTY");
dt.Rows.Add(190, 180, "MNZ");

var result = from r in dt.AsEnumerable()
             orderby (r.Field<int>("Roll") >= 100) ascending
             select new
                        {
                            SrNo = r.Field<int>("SrNo"),
                            Roll = r.Field<int>("Roll"),
                            Name = r.Field<string>("Name"),
                            Result = Convert.ToInt32(Math.Floor(r.Field<int>("Roll")/100.0))
                        };        

Console.WriteLine(
        "{0}\t{1}\t{2}\t{3}",
        "SrNo",
        "Roll",
        "Name",
        "Result");

foreach (var row in result)
{
    Console.WriteLine(
        "{0}\t{1}\t{2}\t{3}",
        row.SrNo,
        row.Roll,
        row.Name,
        row.Result);
}