2012-09-12 138 views
0

我有實體框架查詢:翻譯實體框架查詢爲sql

var query = ctx.v_mp_akt 
.SelectMany(d => ctx.v_ma_akt , (a, b) => new {a, b}) 
.Where(x => x.b.MA_ID == x.a.MA_ID) 
.SelectMany(y => ctx.v_os_akt, (g, h) => new {g, h}) 
.Where(y => y.h.OS_ID == y.g.a.MP_FK_OS_ID_KOMU_WYDANO) 
.Select(x=> new 
{ 
    x.g.b.KT_ETYKIETA, 
    x.g.a.MA_LP, 
    x.g.b.MA_DATA_REJESTRACJI, 
    x.g.b.MA_INF_O_ZMIANIE_KLAUZULI, 
    x.g.a.MP_NR_RTD_TECZKI, 
    x.h.OS_ETYKIETA, 
    x.g.a.MP_FK_KO_ID_WLASCICIEL_MP, 
    x.g.a.JR_NAZWA 
}); 

我不知道如何將這個查詢轉換成純MySQL查詢代碼轉換。你能幫助我嗎?我在mysql語法上不是很好。

這將導致語法錯誤:

select 
     b.KT_ETYKIETA, 
     a.MA_LP, 
     b.MA_DATA_REJESTRACJI, 
     b.MA_INF_O_ZMIANIE_KLAUZULI, 
     a.MP_NR_RTD_TECZKI, 
     h.OS_ETYKIETA, 
     a.MP_FK_KO_ID_WLASCICIEL_MP, 
     a.JR_NAZWA 
from 
     v_ma_akt b where b.MA_ID = a.MA_ID, 
     v_os_akt h where h.OS_ID = a.MP_FK_OS_ID_KOMU_WYDANO, 
     v_mp_akt a 

你能提供任何提示應該如何正確的mysql是什麼樣子?

+0

您可以嘗試使用[MiniProfiler](http://miniprofiler.com/)來查看生成的查詢。 –

回答

0
select 
     b.KT_ETYKIETA, 
     a.MA_LP, 
     b.MA_DATA_REJESTRACJI, 
     b.MA_INF_O_ZMIANIE_KLAUZULI, 
     a.MP_NR_RTD_TECZKI, 
     h.OS_ETYKIETA, 
     a.MP_FK_KO_ID_WLASCICIEL_MP, 
     a.JR_NAZWA 
from v_mp_akt a 
    INNER JOIN v_ma_akt b ON b.MA_ID = a.MA_ID 
    INNER JOIN v_os_akt h ON h.OS_ID = a.MP_FK_OS_ID_KOMU_WYDANO 
+0

嗯,我不能調用此:SQL錯誤:超出排序內存,考慮增加服務器排序緩衝區大小。但是Entity Framework查詢在同一臺服務器上運行時沒有任何問題。有什麼問題? – user1209216

2

使用EF向您顯示生成的SQL。嘗試:

query.ToTraceString(); 
+0

這不是一個好的解決方案 - 那裏有很多混亂,我需要最佳的解決方案, – user1209216

+1

然後我會建議你更新你的問題。你問過如何翻譯SQL,而不是如何優化它。 –