2

我正在从以 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

4 回答 4

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

于 2013-10-04T09:17:00.210 回答
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);
于 2013-10-04T09:22:47.557 回答
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();
于 2013-10-04T09:11:35.693 回答
0

对于获得一些示例的好地方,我会推荐 101 个 linq 示例
它包含从使用 WHERE 到 GROUP BY 语句的所有内容。

于 2013-10-04T09:15:15.673 回答