如果在Linq的其他声明

时间:2011-05-31 04:29:09

标签: c# .net database linq

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

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 !!

5 个答案:

答案 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;

随意更改数字等。

相关问题