मैं SQL सर्वर 2008 और इकाई फ्रेमवर्क 6.1.3 का उपयोग कर रहा हूँ। मैं टेक () और स्किप () के बजाय ऑफ़सेट/फ़ेच के आधार पर डेटा के पेजिनेशन को लागू करना चाहता हूं।

मैंने बिना किसी किस्मत के ऑनलाइन खोज की। कुछ पोस्ट ने SQL सर्वर 2012 में माइग्रेट करने का सुझाव दिया। जो मेरे मामले में एक विकल्प नहीं है।

क्या कोई सुझाव दे सकता है कि SQL Server 2008 और EF 6.1.3 के साथ OFFSET/FETCH का उपयोग कैसे करें?

4
Immortal 25 जुलाई 2017, 14:55
SQL सर्वर 2008 OFFSET / FECTH सिंटैक्स का समर्थन नहीं करता है
 – 
ErikEJ
25 जुलाई 2017, 17:42

3 जवाब

सबसे बढ़िया उत्तर

यह Entity Framework 6.1.2 और इसके बाद के संस्करण के साथ संभव है, इसलिए आपको इसे अपने में उपयोग करने के लिए ठीक होना चाहिए परियोजना। मानक स्किप और टेक विधियों को अन्य की तरह ही कैप्चर नहीं किया जा सकता है। लैम्ब्डा लेने वाली स्किप/टेक विधियों के अब दो अतिरिक्त अधिभार हैं, इसलिए इसके बजाय:

var results = context.MyTable
    .Skip(10)
    .Take(5);

इसे करें:

var results = context.MyTable
    .Skip(() => 10)
    .Take(() => 5);
8
DavidG 25 जुलाई 2017, 15:26
धन्यवाद डेविड, मैंने आपकी प्रतिक्रिया ऊपर टिप्पणियों में देखी, लेकिन अब इस उत्तर के साथ मुझे लगता है कि यह अब समझ में आता है।
 – 
Immortal
25 जुलाई 2017, 15:19
मेरे लिए काम नहीं करता है। मुझे अभी भी 'ऑफसेट' के पास गलत सिंटैक्स मिलता है। FETCH कथन में विकल्प NEXT का अमान्य उपयोग। var list = q.OrderBy(orderBy).Skip(() => skip).Take(() => pageSize).ToList(); का ORDER BY row_number() OVER (ORDER BY [Project1].[PRIORITY] ASC, [Project1].[CREATED] ASC) OFFSET @p__linq__1 ROWS FETCH NEXT @p__linq__2 ROWS ONLY ',N'@p__linq__0 varchar(8000),@p__linq__1 int,@p__linq__2 int',@p__linq__0='STS_NEW',@p__linq__1=0,@p__linq__2=12 में अनुवाद किया जाता है, वही कोड सामान्य रूप से SQL 2012 और इसके बाद के संस्करण पर काम करता है
 – 
DanCZ
14 अगस्त 2019, 00:27
लैम्ब्डा का उपयोग क्यों करें? क्या फायदा?
 – 
orangecaterpillar
25 अप्रैल 2020, 01:35
यदि आप प्रश्न और उत्तर पढ़ते हैं, तो आप अलग-अलग एसक्यूएल देखेंगे जो उत्पन्न होता है।
 – 
DavidG
25 अप्रैल 2020, 01:53
मुझे प्रश्न या उत्तर में SQL नहीं दिख रहा है।
 – 
orangecaterpillar
26 अप्रैल 2020, 16:13

समाधान एक्सएमएल संपादक का उपयोग करके अपनी ईडीएमएक्स फ़ाइल को संशोधित करना है, और 2012 से 2008 तक ProviderManifestToken के मान को बदलना है। मैंने पाया कि मेरी ईडीएमएक्स फ़ाइल में लाइन 7 पर है। उस परिवर्तन को सहेजने के बाद, पेजिंग SQL "पुराने", SQL Server 2008 संगत सिंटैक्स का उपयोग करके उत्पन्न किया जाएगा।

5
DanCZ 14 अगस्त 2019, 00:42
इसने मेरी समस्या हल कर दी! धन्यवाद दोस्त। इसने मेरे linq कोड में कुछ भी बदले बिना SQL Server 2008 पर काम किया।
 – 
Sheikh M. Haris
22 सितंबर 2020, 01:39

यह उदाहरण आपको ऑफ़सेट इन Sql सर्वर का उपयोग करने में मदद कर सकता है

DECLARE @PageNo INT=NULL, 
@RowsPerPage INT=2
;WIth cte(id, name, qty, price)
AS
(
SELECT 2,'a', 2, 20 UNION ALL
SELECT 3,'d', 2, 10 UNION ALL
SELECT 4,'b', 3, 60
)
,cte2 AS (SELECT id, name, qty, price , 1 AS n FROM cte
UNION ALL
SELECT id, name, qty, price , n+1 From cte2 t
WHERE n< t.qty
)
SELECT
  ROW_NUMBER() OVER (ORDER BY (SELECT 1) ) AS Seq,
  id,
  name,
  qty,
  price
FROM cte2
ORDER BY 2, 3, n

OFFSET (COALESCE((CASE  WHEN @PageNo <= 0 THEN 1
                        WHEN @PageNo > 0 THEN @PageNo END), 1) - 1) ROWS
FETCH NEXT @RowsPerPage ROWS ONLY
-2
user7715598user7715598 25 जुलाई 2017, 15:05
1
आपके समय और प्रयास के लिए धन्यवाद @ Shrini131, हालांकि मैं LINQ का उपयोग कर ईएफ में कुछ ढूंढ रहा हूं
 – 
Immortal
25 जुलाई 2017, 15:06