我想知道如何构建一个查询表达式来理解所选择的给定项目是否是第一个。假设我从数据库中选择 10 个项目:
var query = db.Table.Take(10).Select(t => IsFirst ? t.Value1 : t.Value2);
Select 有一个索引变体,但 LINQ-to-SQL 不支持该变体。如果支持的话我的问题就迎刃而解了。还有什么技巧吗?
例如,我可以在 T-SQL 上使用 ROW_NUMBER()
,LINQ-to-SQL 使用但不提供访问权限。
我知道我可以Concat
两个查询并使用第一个查询中的第一个表达式,依此类推,但我不想操作查询的其余部分,只想操作 select 语句本身,因为查询是在多个地方构建的,这就是我想要在第一行表现不同的地方。如果不可能的话,我会考虑其他选择。
最佳答案
您可以使用索引重载,但需要使用 LINQ to Objects 版本:
var query =
db.Table.Take(10).AsEnumreable()
.Select((t, index) => index == 0 ? t.Value1 : t.Value2);
关于linq - 是否可以检测所选项目是否是 LINQ-to-SQL 中的第一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548189/