通过查询获取订单中特定id的位置

本文关键字:id 位置 单中特 查询 获取 | 更新日期: 2023-09-27 18:27:31

我需要在c#中执行一个查询,以获取特定id的位置,按照日期的表顺序。

我的表格结构

IdAirport   bigint
IdUser  int
AddedDate   datetime

数据:

2   5126    2014-10-23 14:54:32.677
2   5127    2014-10-23 14:55:32.677
1   5128    2014-10-23 14:56:32.677
2   5129    2014-10-23 14:57:32.677

例如,我需要知道IdUser=5129在哪个位置,在IdAirport=2中,按AddedDate asc排序。(这种情况下的结果为3)。

编辑:

我使用iQueryables如下:

AirPort AirPort=(将机场作为上下文。AirPort选择机场).FirstOrDefault();

谢谢你抽出时间!

通过查询获取订单中特定id的位置

使用LINQ:如果要以任意顺序查找元素的索引,可以使用OrderBy()TakeWhile()Count()

 db.records.Where(x => x.IdAirport == airportId)
           .OrderBy(x => x.AddedDate)
           .TakeWhile(x => x.IdUser != userId)
           .Count() + 1;

这里有一个快速的例子:

public class test
{
    public int IdAirport;
    public int IdUser;
    public DateTime AddedDate;
    public test(int IdAirport, int IdUser, DateTime AddedDate)
    {
        this.IdAirport = IdAirport;
        this.IdUser = IdUser;
        this.AddedDate = AddedDate;
    }
}
    void Main()
    {
        List<test> tests = new List<test>()
    {
    new test(2,   5126,    DateTime.Parse("2014-10-23 14:54:32.677")),
    new test(2,   5127,    DateTime.Parse("2014-10-23 14:55:32.677")),
    new test(1 ,  5128 ,   DateTime.Parse("2014-10-23 14:56:32.677")),
    new test(2  , 5129  ,  DateTime.Parse("2014-10-23 14:57:32.677"))
    };
        var r = tests
        .Where(t => t.IdAirport == 2)
        .OrderBy(t => t.AddedDate)
        .TakeWhile(t => t.IdUser != 5129)
        .Count() + 1;
        Console.WriteLine(r);
    }

它会保持你自己列表的确切顺序。如果您愿意,您可以修改Where/OrderBy,有趣的部分在"TakeWhile/Count"使用中。

应该可以很好地工作,但对于长列表可能不是很有效。

编辑:似乎和伊恩·默瑟一样。但我自己的样本中需要"+1",因为TakeWhile将返回跳过项目的数量,因此不是好项目的位置。或者我没有解决这个问题。

这应该可以满足您的需要:

dataTable.Rows.IndexOf(
    dataTable.AsEnumerable().OrderBy(
    x => x["AddedDateColumn"]).First(
    x => (int)(x["IdUserColumn"]) == 5129));