我正在从一个以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中。
任何人都可以提供帮助:
答案 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语句的所有内容。