2017-01-15 9 views
5

मैं MySQL डाटाबेस से Products पृष्ठ पर अंक लगाना करने के लिए कोशिश कर रहा हूँ, लेकिन अगर मैं Skip() या Take() का उपयोग यह इसछोड़ें और MySQL EntityFrameworkCore के साथ काम नहीं ले

[] 

लेकिन एक्सटेंशन की तरह अपने वेब एपीआई प्रतिक्रिया के रूप में एक खाली JSON सारणी रिटर्न FirstOrDefault(), Where() जैसे तरीके ... ठीक काम करता है।

public IActionResult GetPage(int page, int pageSize = 2) 
{    
    int productCount = _context.Products.Count(); // 5 
    float totalPages = (float)Math.Ceiling((float)productCount/pageSize); //2.5 -- round to 3 

    if (page < 1 || page > totalPages) return NotFound(); 
    var products = _context.Products.Skip((page - 1) * pageSize).Take(pageSize); //skip & take err mysql ef 

    return Ok(products); 
} 

मैं भी कोई भाग्य के साथ क्वेरी .Skip(1).Take(2) hardcoded: यहाँ कोड का टुकड़ा है। किसी को भी इस समस्या का सामना करना पड़ा है या एक कामकाज पता है?

+0

क्या आपने आवेदन करने से पहले अपनी क्वेरी को ऑर्डर करने का प्रयास किया है और ले लो? –

उत्तर

4

यह ओरेकल द्वारा प्रदत्त MySql.Data ईएफ कनेक्टर में एक बग साबित हुआ, बग विवरण here पोस्ट किया गया है।

वैकल्पिक समाधान:

मैं Pomelo नामक एक और कनेक्टर के लिए बदल गया है, अब Skip और Take काम करता है बिल्कुल ठीक। आप Pomelo.EntityFrameworkCore.MySql के लिए nuget खोज सकते हैं और अपनी परियोजना के लिए उपयुक्त संस्करण स्थापित कर सकते हैं।

का उपयोग करने के लिए, जब DbContext को विन्यस्त बस .UseMySql करने के लिए .UseMySQL बदलने के लिए, ओरेकल कनेक्टर उपयोग SQL और चकोतरा उपयोग के रूप में Sql केवल आवरण अलग है।

services.AddDbContext<ApplicationDbContext>(options => 
    options.UseMySql(Configuration.GetConnectionString("DefaultConnection"))); 
0

खैर मैं knwon जवाब पुराना है ... लेकिन ... एफई mysql में आप छोड़ से पहले desc द्वारा या आदेश एक आदेश पारित करते जरूरत है।

रियल समाधान, वैकल्पिक नहीं:

इस तरह:

var yourVar = dbContext.LinkText 
         .Where(x => x.active) 
         .OrderByDescending(x => x.startDate) 
         .Skip(50) 
         .Take(10); 

आप छोड़ पर किसी भी तर्क के साथ उपयोग करें और इस तरह से ले सकते हैं:

query 
.OrderByDescending(x => x.startDate) 
.Skip(page <= 1 ? 0 : (page - 1) * (qty == 0 ? 10 : qty)) 
.Take(qty == 0 ? 10 : qty); 

और फिर mySQL कोड प्राप्त करेगा:

*...the query...*  
ORDER BY `Extent1`.`startDate` DESC 
    LIMIT 0,10 
संबंधित मुद्दे