2012-03-08 230 views
0

請有人可以幫助我將此MySQL查詢轉換爲實體框架? 即時通訊在一個ASP .NET項目中使用,但我只知道如何在實體框架中進行基本查詢。這似乎太複雜,我無法找到,因爲現在很多小時的工作解決方案......將MySQL查詢轉換爲實體框架查詢語法

$rs = mysql_query("SELECT barcode,latitude,longitude,date_time,location_name 
        FROM sDetails 
        JOIN users on (users.id=sDetails.UserId) 
        WHERE (latitude and longitude is not null) 
         and (latitude <> 100000 and longitude <> 100000) 
       and id='$UserId' 
      ORDER BY date_time desc"); 

回答

1

假設你已經生成從數據庫中實體框架模型,你應該能夠做到像(C#示例):

var q = context.Details.Where(d => d.UserId = "$UserID"). 
      Where(d => d.latitude.HasValue && d.latitude != 100000 && .. etc). 
      OrderByDescending(d => d.date_time). 
      Select(d => new {d.barcode, d.latitude, d.longitude, etc ... }; 

我不知道爲什麼你有加入,因爲你沒有選擇從用戶表什麼。

+0

感謝您的準確答案。請看下面的答案。我仍然有一些錯誤.. – 2012-03-08 16:35:52

0

感謝@Phil 上面給出的代碼似乎大部分工作,但它仍然在 var q = context中顯示錯誤。 ScanDetails。凡

錯誤3:「System.Web.HttpContext」不包含 「ScanDetails」的定義和沒有擴展方法「ScanDetails」接受型的System.Web的「第一 參數。 HttpContext的」可以找到(你 缺少using指令或程序集引用?)

這是我的代碼至今:

public class read : IHttpHandler 
{ 
    sqlEntities _db = new sqlEntities(); 

    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext context) 
    { 
     //Write out the JSON you want to return. 

     var q = context.ScanDetails.Where(d => d.UserId = "1"). 
     Where(d => d.latitude.HasValue && d.latitude != 100000 ). 
     OrderByDescending(d => d.date_time). 
     Select(d => new {d.barcode, d.latitude, d.longitude }; 


      // stuff to do here 

    } 


    public IQueryable<ScanDetail> scanData { get; set; } 
} 
+0

當我把*上下文*我的意思是數據庫上下文,在你的情況下* _db *。你應該修改你的問題,而不是添加答案(當然,除非它是答案)。 – Phil 2012-03-08 16:37:06

+0

謝謝@菲爾 我接受你的答案作爲解決方案。 另外我會考慮你對未來回答的建議。 玩得很開心:) – 2012-03-08 16:58:07