【问题标题】:Entity Framework: How do I invoke pairs of entities from a raw query实体框架:如何从原始查询中调用实体对
【发布时间】:2015-04-25 01:57:53
【问题描述】:

例如,我有一个查询:

SELECT * FROM
persons
LEFT JOIN vehicles
ON persons.Id = vehicles.OwnerId

我想在 EF 数据上下文中执行此查询,并拥有“人-车辆”对数组。我该怎么做?

另一个例子:

SELECT persons.*, COUNT(vehicles.*) as cnt FROM
persons
JOIN vehicles
ON persons.Id = vehicles.OwnerId
GROUP BY vehicles.Id

在这里,我想要一个人的字典作为键和他拥有的车辆数量作为值。

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

【问题讨论】:

    标签: entity-framework entity-framework-5


    【解决方案1】:

    您可能想要阅读 LINQ to Entities。 https://msdn.microsoft.com/en-us/library/vstudio/bb386964(v=vs.100).aspx

    第一个非常基本:

    var persons = context.Persons
                         .Include(p => p.Vehicles) 
                         .ToList(); 
    

    第二个稍微高级一点:

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

    您也可以按照链接中的说明进行分组。

    【讨论】:

    • 正如我在标题中提到的,我想知道如何使用原始 SQL 实现相同的目标。 IE。像这样:var l = dbSet.Persons。 SqlQuery("SELECT p.*, COUNT(c.Id) as cnt FROM People as p JOIN Cars as c ON p.Id = c.OwnerId GROUP BY p.Id") 这里有一些代码来获取人和汽车计数 .ToList();
    • 好的,所以您的问题并不是真正的实体框架,因为您知道可以使用 LINQ 并运行原始查询 (msdn.microsoft.com/en-us/data/jj592907.aspx)。如果您需要查询语法方面的帮助,您应该添加一个 SQL 标记。
    • 是的,我的问题是关于 sql linq 原始查询,如标题中所述:) 但它不是关于 sql 语法,而是关于 linq approaxch 返回值
    • 从原始查询返回值的 LINQ 方法是: var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();因此,如果您有查询,只需将 select 语句替换为您的。如果涉及聚合,可以添加groupby。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2015-06-16
    • 2021-04-26
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多