Entity framework 实体框架:如何从原始查询调用实体对

Entity framework 实体框架:如何从原始查询调用实体对,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,例如,我有一个查询: SELECT * FROM persons LEFT JOIN vehicles ON persons.Id = vehicles.OwnerId 我希望在EF数据上下文上执行此查询,并拥有成对的数组“person-vehicle”。我该怎么做 另一个例子: SELECT persons.*, COUNT(vehicles.*) as cnt FROM persons JOIN vehicles ON persons.Id = vehicles.OwnerId GROUP

例如,我有一个查询:

SELECT * FROM
persons
LEFT JOIN vehicles
ON persons.Id = vehicles.OwnerId
我希望在EF数据上下文上执行此查询,并拥有成对的数组“person-vehicle”。我该怎么做

另一个例子:

SELECT persons.*, COUNT(vehicles.*) as cnt FROM
persons
JOIN vehicles
ON persons.Id = vehicles.OwnerId
GROUP BY vehicles.Id
在这里,我想有一本字典,把一个人作为钥匙,把他拥有的汽车数量作为价值


我知道这些问题很简单,在这些情况下最好避免使用原始sql。但我想知道原始查询处理的可能性,因为现实生活中的查询可能要复杂得多。

您可能需要对实体进行一些读取

第一个非常基本:

var persons = context.Persons
                     .Include(p => p.Vehicles) 
                     .ToList(); 
第二个更高级一些:

var persons = context.Persons
                     .Select(p => new { Person p, VehicleCount = p.Vehicles.Count() }
                     .ToList(); 

您还可以创建一个链接中描述的组。

正如我在标题中提到的,我想知道如何使用原始SQL实现同样的功能。也就是说,类似这样的东西:var l=dbSet.Persons。SqlQuery(“选择p.*,将(c.Id)作为cnt从人作为p加入汽车作为c ON p.Id=c.OwnerId按p.Id分组”)这里的一些代码用于获取人和汽车计数。ToList();好的,您的问题并不是真正的实体框架,因为您知道可以使用LINQ并运行原始查询()。如果您需要查询语法方面的帮助,您应该添加一个SQL标记。是的,我的问题是关于SQL linq原始查询,如标题中所述:),但这不是关于SQL语法,而是关于linq方法返回值从原始查询返回值的linq方法是:var blogs=context.blogs.SqlQuery(“SELECT*from dbo.blogs”).ToList();因此,如果您有查询,只需将select语句替换为您的语句。如果它涉及聚合,则可以添加groupby。