是否可以检测所选项是否是LINQ-to-SQL中的第一项?

时间:2012-05-11 08:44:41

标签: linq linq-to-sql

我想知道如何构建一个查询表达式,该表达式理解所选择的给定项目是否是第一个。假设我从DB中选择了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语句本身,因为查询是在多个地方,这是我想在第一行表现不同的地方。如果不可能,我会考虑其他选择。

2 个答案:

答案 0 :(得分:2)

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

var query = 
    db.Table.Take(10).AsEnumreable()
    .Select((t, index) => index == 0 ? t.Value1 : t.Value2);

答案 1 :(得分: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)
        }
    );