2017-01-15 10 views
5

で作業していないTakeはFirstOrDefault()Where()などのメソッドは正常に動作します。私も運とクエリ.Skip(1).Take(2)をハードコードスキップと私はMySQLのDBから<code>Products</code>ページ付けしようとしていますが、私は<code>Skip()</code>か<code>Take()</code>を使用している場合、それはこの</p> <pre><code>[] </code></pre> <p>しかし、延長のような私のWeb APIレスポンスとして空のJSON配列を返しますMySQLのEntityFrameworkCore

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); 
} 

:ここにコードスニペットです。誰でもこの問題に直面したか回避策を知っていますか?

+0

Skip and Takeを適用する前にクエリを注文しようとしましたか? –

答えて

4

Oracleが提供するMySql.Data EFコネクタのバグであることが判明しました。バグの詳細はhereです。

代替ソリューション:

私はSkip今、Pomeloと呼ばれる別のコネクタに変更し、Takeは完全に正常に動作します。あなたはPomelo.EntityFrameworkCore.MySqlのためにナゲットを検索し、あなたのプロジェクトに適切なバージョンをインストールすることができます。

Sqlだけ筐体が異なる DbContextを設定するときに、単にオラクルコネクタ使用 SQLとザボンの使用など、 .UseMySql.UseMySQLを変更、使用します。

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

さて私は、EFのMySQLではあなたはスキップする前にDESCで一桁または順序を渡さない必要があります...答えは古いですknwonけど...。

真の解決策ではなく、代替:あなたはスキップに任意のロジックを使用して、次のように取ることができます

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 
関連する問題

 関連する問題