我有一个数据表,其中包含以下数据
SrNo Roll Name
1 1 XYZ
99 45 ABC
150 120 POQ
10 9 RTY
我想找出卷号& srno的名称范围为0-100& 100-200
所以输出将是
// For the range 0-100
SrNo Roll Name
1 1 XYZ
99 45 ABC
10 9 RTY
// & For 100-200
SrNo Roll Name
150 120 POQ
我正在尝试通过LINQ和if-else
语句实现。
如果还有什么请建议使用LINQ !!
答案 0 :(得分:3)
代码:
var items =
new[]
{
new { SrNo = 1, Roll = 1, Name = "XYZ" },
new { SrNo = 99, Roll = 45, Name = "ABC" },
new { SrNo = 150, Roll = 120, Name = "POQ" },
new { SrNo = 10, Roll = 9, Name = "RTY" }
};
const int NumberOfItemsInRange = 100;
var ranges = items
.GroupBy(arg => arg.SrNo / NumberOfItemsInRange)
.Select(arg => new { RangeNumber = arg.Key, Items = arg.ToList() })
.ToList();
foreach (var range in ranges)
{
Console.WriteLine("Range {0}-{1}", range.RangeNumber * NumberOfItemsInRange, (range.RangeNumber + 1) * NumberOfItemsInRange);
foreach (var item in range.Items)
Console.WriteLine("{0,10} {1,10} {2,10}", item.SrNo, item.SrNo, item.Name);
}
输出:
Range 0-100
1 1 XYZ
99 99 ABC
10 10 RTY
Range 100-200
150 150 POQ
答案 1 :(得分:2)
Linq没有if / else运算符。对于您的情况,您需要使用where子句来过滤数据
public IEnumerable<SrObj> GetSrObj (int min, int max)
{
return from d in data_source
where d.SrNo >= min && d.SrNo <= max
select d;
}
//get 0-100
GetSrObj (0,100)
//get 100 -200
GetSrObj (100,200)
//Get both ranges
GetSrObj (0,100).Union(GetSrObj (100,200))
答案 2 :(得分:1)
你的问题告诉我,你想要按100分组数据。如果是这样,请尝试以下代码段:
// grouping by srno
var results = from row in table.AsEnumerable()
let key = row.Field<int>("SrNo") / 100
group row by key into rowgroups
select rowgroups;
这将按SrNo
字段批量分组您的行。验证:
foreach (var rowgroup in results)
{
Console.WriteLine("\nGroup {0}", rowgroup.Key);
foreach (DataRow row in rowgroup)
{
Console.WriteLine("{0}\t{1}\t{2}",
row.Field<int>("SrNo"),
row.Field<int>("Roll"),
row.Field<string>("Name"));
}
}
答案 3 :(得分: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, "ROQ");
dt.Rows.Add(10, 9, "RTY");
var result1 = from r in dt.AsEnumerable()
where r.Field<int>("Roll") >= 0 && r.Field<int>("Roll") <= 100
select r;
var result2 = from r in dt.AsEnumerable()
where r.Field<int>("Roll") >= 100 && r.Field<int>("Roll") <= 200
select r;
答案 4 :(得分:0)
var result = from p in table1 where p.srno<100&&p.srno>0 select p;
随意更改数字等。