将MySQL查询转换为实体框架查询语法

问题描述:

请有人可以帮助我将此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"); 

假设你已经生成从数据库中实体框架模型,你应该能够做到像(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

感谢@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