2

我想知道如何构建一个查询表达式来理解所选择的给定项目是否是第一个。假设我从 DB 中选择 10 个项目:

var query = db.Table.Take(10).Select(t => IsFirst ? t.Value1 : t.Value2);

Select 有一个索引变体,但在 LINQ-to-SQL 中不受支持。如果它得到支持,我的问题将得到解决。有没有其他技巧?

例如,我可以ROW_NUMBER()在 T-SQL 上使用,LINQ-to-SQL 使用但不提供访问权限。

我知道我可以进行Concat两个查询并在第一个中使用第一个表达式,依此类推,但我不想操作查询的其余部分,只操作 select 语句本身,因为查询是在多个位置构建的,这就是我想要的在第一行表现不同。如果不可能,我会考虑其他选择。

4

2 回答 2

2

您可以使用索引重载,但需要使用 LINQ to Objects 版本:

var query = 
    db.Table.Take(10).AsEnumreable()
    .Select((t, index) => index == 0 ? t.Value1 : t.Value2);
于 2012-05-11T08:48:18.927 回答
1

如果Table有主键。你可以这样做:

var result= (
        from t in db.Table.Take(10)
        let first=db.Table.Take(10).Select (ta =>ta.PrimayKey).First()
        select new
        {
            Value=(t.PrimaryKey=first?t.Value1 : t.Value2)
        }
    );
于 2012-05-11T08:54:46.200 回答