C# 使用LINQ获取满足特定条件的数据表行号

C# 使用LINQ获取满足特定条件的数据表行号,c#,linq,C#,Linq,如何获得满足特定条件的datatable行号数组?例如,我有一个列为DateTime的datatable。我想检索数据表的行号,其中DateTime等于变量startTime 我知道如何检索实际行,但不知道数据表中的行数 任何帮助都将不胜感激:如果我正确地阅读了问题,那么使用允许第二次输入索引的Select重载可能对您有用。差不多 var indices = table.AsEnumerable() .Select((row, index) => new { r

如何获得满足特定条件的datatable行号数组?例如,我有一个列为DateTime的datatable。我想检索数据表的行号,其中DateTime等于变量startTime

我知道如何检索实际行,但不知道数据表中的行数


任何帮助都将不胜感激:

如果我正确地阅读了问题,那么使用允许第二次输入索引的Select重载可能对您有用。差不多

var indices = 
    table.AsEnumerable()
         .Select((row, index) => new { row, index })
         .Where(item => item.row.Field<DateTime?>("DateTime") == startTime)
         .Select(item => item.index)
         .ToArray();

如果该日期与第一行、第三行和第六行匹配,则数组将包含索引0、2和5。当然,如果希望行号从1开始,可以向查询中的每个索引添加1。例如:.Selectitem=>item.index+1

如果我正确地阅读了问题,那么使用Select重载来允许对索引进行第二次输入可能对您有用。差不多

var indices = 
    table.AsEnumerable()
         .Select((row, index) => new { row, index })
         .Where(item => item.row.Field<DateTime?>("DateTime") == startTime)
         .Select(item => item.index)
         .ToArray();
如果该日期与第一行、第三行和第六行匹配,则数组将包含索引0、2和5。当然,如果希望行号从1开始,可以向查询中的每个索引添加1。例如:.Selectitem=>item.index+1

或作为查询:

int count = (from row in tblData.AsEnumerable()
             where row.Field<DateTime>("DateTime").Equals(startTime)
             select row).Count();
或作为查询:

int count = (from row in tblData.AsEnumerable()
             where row.Field<DateTime>("DateTime").Equals(startTime)
             select row).Count();

这是不可能的。注意,对于SQL,我假设您使用SQL,返回的行顺序是不保证的。您的行是根据主键进行物理排序的。因此,如果需要可靠的行标识符,必须使用主键号/id。

这是不可能的。注意,对于SQL,我假设您使用SQL,返回的行顺序是不保证的。您的行是根据主键进行物理排序的。因此,如果您想要可靠的行标识符,必须使用主键号/id。

请参阅并向下滚动以选择-IndexedSee查看并向下滚动以选择-Indexed+1您确定需要可计算的行标识符吗?我认为Count可以很好地使用SQL,因此您可以完全依靠LINQ2SQL在RDBMS层为您完成工作。@dasblinkenlight,不清楚他是否在使用LinqtoSQL。当OP表示datatable时,我认为它是指datatable类型的实际内存中对象。当然,这可能是非常错误的。@AnthonyPegram你是对的,我假设它是linq-2-sql,而事实上问题没有这样说。+1你确定你需要一个可计算的吗?我认为Count可以很好地使用SQL,因此您可以完全依靠LINQ2SQL在RDBMS层为您完成工作。@dasblinkenlight,不清楚他是否在使用LinqtoSQL。当OP表示datatable时,我认为它是指datatable类型的实际内存中对象。当然,这可能是非常错误的。@AnthonyPegram你是对的,我假设它是linq-2-sql,而事实上问题没有这么说。Anthony,有可能使用ToArray将结果放入另一个数据表而不是var吗?或者我应该将/cast var转换成一个DataTable吗?但愿有今天的桌子;Anthony,是否可以使用ToArray将结果放入另一个数据表而不是var?或者我应该将/cast var转换成一个DataTable吗?但愿有今天的桌子;