通过查询获取订单中特定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();
谢谢你抽出时间!
使用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));