【问题标题】:LINQ to EF returning all fields not just those in Select()LINQ to EF 返回所有字段,而不仅仅是 Select() 中的字段
【发布时间】:2013-08-30 15:32:02
【问题描述】:

这是我使用 Linq to Entity Framework 在 LinqPad 中测试的查询的要点。

在我看来,生成的 SQL 应该以 SELECT TableA.ID AS myID 之类的内容开头。相反,SELECT 包括所有表中的所有字段。不用说,这会在其他问题中引起巨大的性能损失。我怎样才能防止这种情况发生?

var AnswerList = this.Answers
                .Where(x=>
                    ..... various conditions on x and related entities...
                )
                .GroupBy(x => new {x.TableA,x.TableB,x.TableC})
                .Select(g=>new  {
                        myID = g.Key.TableA.ID,
                })


AnswerList.Dump();

实际上,我使用的是一种新类型而不是匿名类型,但结果都是一样的。

如果您需要我填写更多……请告诉我。

更新

我注意到我可以通过在 GroupBy 方法中明确指定我想要返回的字段来防止这个问题,例如new {x.TableA.ID ... }

但我仍然不明白为什么仅使用 Select 方法不起作用(在 Linq to SQL 中执行等效操作时它确实起作用)。

【问题讨论】:

  • 不可能。您只选择了一个具有属性myID 的匿名对象。
  • 嗨 - 也许我的问题不清楚 - 我试图阻止它返回数据库中的所有字段。我只想要 myID 而是返回所有字段,然后将 myID 提取到内存中。
  • 您是否通过 SQL Server Management Studio Profiler 进行了测试?我测试了一个类似的查询,最上面的 SELECT 只返回一列。
  • 是的,我做到了。我正在使用 LINQ to Entity Framework。如果我使用 LINQ to SQL,我会得到你的结果。

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


【解决方案1】:

嗨,

你能在下面试试吗....?

var query = from SubCat in mySubCategory
      where SubCat.CategoryID == 1
      group 1 by SubCat.CategoryID into grouped
      select new { Catg = grouped.Key,
           Count = grouped.Count() };

谢谢, 维沙尔·帕特尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多