【问题标题】:Return Tuple from EF select从 EF 选择返回元组
【发布时间】:2010-01-22 16:24:38
【问题描述】:

如何使用 EF4 在 Select 处检索元组?

        var productCount = (from product in context.products
                    select new Tuple<Product, int>(product, products.Orders.Count));

或者

        var productCount = (from product in context.products
                    select Tuple.Create(product, products.Orders.Count));

实体框架说第一种情况不能使用非空构造函数,第二种情况不能识别 Tuple.Create 方法。

【问题讨论】:

    标签: c# .net entity-framework linq-to-entities


    【解决方案1】:

    如何切换到 LINQ-to-Objects 进行投影:

    var productCount = from product in context.products
                    select new {Product = product, Count = products.Orders.Count };
    var final = from item in productCount.AsEnumerable()
                select Tuple.Create(item.Product, item.Count);
    

    【讨论】:

    • 不是一个袋子猜测,那么,考虑到 ;-p 我赞成“连接”项目。
    • 我在做这个。但是没有更好的选择吗?
    • 实际上,这样做的缺点是 EF 仍在查询所有数据,而不仅仅是您正在使用的列。
    • @NelsonReis 不错。我收回我之前的评论(大约一年前)。不过,请注意这里有两个选择:第一个选择是 EF 看到的,第二个选择是在执行 SQL 查询后对内存中的对象执行的(AsEnumerable() 触发查询执行,只是像 ToList())。您应该确保第一个只选择第二个使用的数据,就像 Marc 在这里所做的那样,否则查询会浪费地获取太多数据。
    【解决方案2】:

    试试

     var productCount = from product in context.products 
                        select new { product, Count = products.Orders.Count }; 
    

    这将返回一个非常接近元组的匿名类型 http://msdn.microsoft.com/en-us/library/bb738512.aspx

    【讨论】:

    • 我知道。但是匿名类型不是公开的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多