从SQL迁移到实体框架代码优先

时间:2013-10-04 09:03:39

标签: c# sql entity-framework

我正在从一个以SQL为中心的世界(我相当流利的地方)到EF dDbContect,首先是代码,我正在努力。以下是一个简化的例子;我想编写以下简单的SQL查询(写入时间为60秒):

SELECT
    HP.HospitalID
FROM
    Hospitals AS HP
    JOIN NHSTrusts AS NT
    ON NT.NHSTrustID = HP.NHSTrust_NHSTrustID

WHERE
    HP.HospitalName + ', ' + NT.NHSTrustName = 'My hospital name including trust'

作为EF样式查询。我无法看到如何做到这一点,我不想每次看不到如何做某事时都回到SQL中。

任何人都可以提供帮助:

  • 关于如何在EF dbContent
  • 中构建上述查询
  • 关于
  • 的一般帮助来源

4 个答案:

答案 0 :(得分:3)

假设您的实体和数据库上下文已正确设置,以下是您的查询的外观:

var hospitalIds = 
    from hp in dbContext.Hospitals
    where 
        hp.HospitalName == "..." &&
        hp.Trust.NHSTrustName == "..."
    select hp.HospitalId;

当然,必须通过迭代结果(或使用.ToList() / .ToArray())来实现此查询。

要正确定义实体和上下文,请参阅MSDN上的这篇优秀教程:http://msdn.microsoft.com/en-us/data/jj193542

答案 1 :(得分:2)

假设这些实体类型:

public class Trust
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Hospital> Hospitals { get; set; }
}

public class Hospital
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int TrustId { get; set; }
    public Trust Trust { get; set; }
}

你会有这个问题:

dbContext
    .Hospitals
    .Where(h => h.Name + h.Trust.Name == "My hospital name including trust")
    .Select(h => h.Id);

答案 2 :(得分:1)

首先尝试一些Linq。你可以写如下。查询可能有一些错误,它将由Intellisense纠正。

var s  = (from c in Context.Hospitals
          from h in Context.NHSTrusts
          where c.NHSTrust_NHSTrustID==h.NHSTrustID 
          && string.Format("{0},{1}",c.HospitalName,h.NHSTrustName).Equals("My hospital name including trust")

          select c.HospitalId).FirstOrDefault();

答案 3 :(得分:0)

为了获得一些例子的好地方,我建议101 linq samples
它包含从使用WHERE到GROUP BY语句的所有内容。