1

我最近开始使用 Entity Framework 试验 Raw SQL,在某些情况下我更喜欢它。我想知道是否有办法获取关系实体:

不工作:

var personNo = context.Person.SqlQuery("SELECT * FROM `Person` LIMIT 1").FirstOrDefault();

foreach(var Number in personNo.Phone) {
  //never iterates
}

有效(但在这种情况下我不想要 LINQ-to-Entities):

var personNo = context.Person.FirstOrDefault();

foreach(var Number in personNo.Phone) {
  //iterate twice as it contains in the db
}

我尝试了几个不同的查询,包括

SELECT * FROM `Person` LEFT JOIN `Phone` ON (`Person`.ID = `Phone`.PersonID) LIMIT 1

编写查询以接收电话号码列表的正确方法是什么?这可能吗?

4

1 回答 1

0

您可以对实体执行 SQL。当我在其中加入和分组时,我更喜欢这种方式,并且没有创建视图的权限。

首先,创建一个类并添加与返回的列同名的属性。

public class PersonWithAddress
{
    public int Id { get; set; }
    public String Name { get; set; }
    public String Address { get; set; }
}

和带有参数的 C#

MyEntity db = new MyEntity();
String sqlQuery = @"
  SELECT Id, Name, Address
  FROM Person p
  JOIN Address a
  ON a.Id = p.Id
  WHERE Name = @Name
  AND Address = @Address
";
String searchName = "Joe";
String address = "123 Something Lane";

DbRawSqlQuery<PersonWithAddress> results = db.Database.SqlQuery<PersonWithAddress>(
    sqlQuery,
    new SqlParameter("@Name", searchName),
    new SqlParameter("@Address", address)
);

foreach(PersonWithAddress a in results)
{

}

您可以列出任意数量的参数。
哇,这个问题已经 2 岁了。我什至没有意识到这一点。

于 2015-05-25T16:23:47.567 回答