2011-10-25 31 views
1

我有SQL查詢:如何使用實體框架獲取行的序列號?

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

我如何使用實體框架同樣的結果?

+0

你是指'where seqNumber = 35'? –

+0

不,我需要記錄具體的ID,但與序列號獲得通過排序的所有記錄以任何順序 – JIemON

+0

而不是RecordID = 35可能會更復雜條件 – JIemON

回答

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() 

但比你一定要幸福的事實,符合第一個條件的所有記錄在本地獲取。

編輯:

您的意見後:Propably類似:

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條款中查看查詢。

相關問題