如何使用Entity Framework获取行的序列号?

时间:2011-10-25 16:39:34

标签: c# sql entity

我有SQL查询:

WITH OrderedRecs AS
(select ROW_NUMBER() OVER(ORDER BY RecID) as seqNumber,* from Records where RecordGroupID=7)
SELECT * FROM OrderedRecs where RecordID=35

如何使用实体框架获得相同的结果?

2 个答案:

答案 0 :(得分:1)

纯LINQ解决方案将是:

records.Where(rec => rec.RecordGroupID == 7)
    .OrderBy(rec => rec.RecId).AsEnumerable()
    .Select((rec, i) => new { i, rec })
    .Where(anon => anon.i == 35)
    .Select(anon => anon.rec).First()

但是你必须对所有与第一个条件相匹配的记录在本地获取这一事实感到满意。

修改

评论之后:可能类似于:

IEnumerable<SortedRecord> GetSortedRecords(IQueryable<Record> records
    , Func<SortedRecord, bool> sortedRecordPredicate)
{
    return
      records.Where(rec => rec.RecordGroupID == 7)
        .OrderBy(rec => rec.RecId).AsEnumerable()
        .Select((rec, i) => new SortedRecord{ Sequence = i, Record = rec })
        .Where(sortedRecordPredicate);
}

var result = GetSortedRecords(records, rec => rec.Record.RecordID = 35);

显然,SortedRecord是一种类型,可以输入各种条件。 (语法未选中)。

完全不同的方法是在WITH子句中查看查询。

答案 1 :(得分:0)

你不能将SeqNumber作为派生(或鉴别器)列添加到基础实体吗? See previous example。你必须自己分配它。