我有SQL查詢:如何使用實體框架獲取行的序列號?
WITH OrderedRecs AS
(select ROW_NUMBER() OVER(ORDER BY RecID) as seqNumber,* from Records where RecordGroupID=7)
SELECT * FROM OrderedRecs where RecordID=35
我如何使用實體框架同樣的結果?
我有SQL查詢:如何使用實體框架獲取行的序列號?
WITH OrderedRecs AS
(select ROW_NUMBER() OVER(ORDER BY RecID) as seqNumber,* from Records where RecordGroupID=7)
SELECT * FROM OrderedRecs where RecordID=35
我如何使用實體框架同樣的結果?
難道您不能將SeqNumber作爲派生(或鑑別器)列添加到基礎實體嗎? See previous example。你必須自己分配它。
純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
條款中查看查詢。
你是指'where seqNumber = 35'? –
不,我需要記錄具體的ID,但與序列號獲得通過排序的所有記錄以任何順序 – JIemON
而不是RecordID = 35可能會更復雜條件 – JIemON