【问题标题】:Unknown column error using Entity Framework and LINQ使用实体框架和 LINQ 的未知列错误
【发布时间】:2011-07-28 18:29:04
【问题描述】:

我昨天开始使用 EF,我无法将这个简单的查询转换为 EF sintax

翻译:

select a.city from offer o, address a, offer_address oa
where o.identifier = oa.offeridentifier 
and a.identifier = oa.addressidentifier
group by a.city
order by count(*) desc

进入:

var cities = (from o in db.offer
              from a in db.address
              from oa in db.offer_address
              where (o.identifier == oa.offeridentifier
                  && a.identifier == oa.addressidentifier)
              group a by a.city into c
              select new
              {
                  quantity = c.Count(),
                  city = c.Key
              }).OrderByDescending(a => a.quantity).Select(a => a.city);

var cityCollection = new List<string>();
foreach (var city in cities)
    cityCollection.Add(city.ToString());

我试过了,没有成功

var cities = (from oa in db.offer_address
                    from of in db.offer.Where(x => x.identifier == oa.identifier)
                    from ad in db.address.Where(y => y.identifier == oa.offeridentifier).AsEnumerable()
                group ad.city by new { ad.city } into g
                select new
                {
                    quantity = g.Count(),
                    city = g.Key
                }).OrderByDescending(a => a.quantity);

尝试进入第一个循环时出现问题!

Unknown column 'GroupBy1.K1' in 'field list'`

Line 55: foreach (var city in cities)`

第二种情况:

Can't group on 'A1'

更新

此代码有效,但我不需要

var cities = (
                    from of in db.offer
                    from ad in db.address
                    from oa in db.offer_address
                    where (of.identifier == oa.offeridentifier && ad.identifier == oa.addressidentifier)
                group ad.city by new { ad.city } into g
                select new
                {
                    quantity = g.Count()
                }).OrderByDescending(a => a.quantity)

或者

var cities = (
                    from of in db.offer
                    from ad in db.address
                    from oa in db.offer_address
                    where (of.identifier == oa.offeridentifier && ad.identifier == oa.addressidentifier)
                group ad.city by new { ad.city } into g
                select new
                {
                    city = g.Key
                });

【问题讨论】:

  • 类似 from o in db.offer from a in db.address from oa in db.offer_address where (o.identifier == oa.offeridentifier &amp;&amp; a.identifier == oa.addressidentifier) group a by a.city into c orderby c.Key select c.Key 但我真的不知道如何用 group by 计数(*)
  • 这是您尝试使用模型和数据库的第一个第一个查询吗?这不是一个真正的“简单查询”。非常非常简单的查询呢?例如:(from a in db.address select a.city).ToList()。这行得通吗?由于异常中提到了 column 这个词,我猜想您的模型属性与您正在使用的现有数据库中的列之间可能存在不匹配。 EF 生成一条 SQL 语句,DB 说“无法执行,因为我的表中不存在该列”之类的......
  • @Saluma,这个工作很好(from o in db.offer from a in db.address from oa in db.offer_address where (o.identifier == oa.offeridentifier &amp;&amp; a.identifier == oa.addressidentifier) group a by a.city into c select c.key,当我添加不是列的 quantity 时会出现这个问题,它只是一个 count(*) 我得到了这个异常!
  • 此代码有效from o in db.offer from a in db.address from oa in db.offer_address where (o.identifier == oa.offeridentifier &amp;&amp; a.identifier == oa.addressidentifier) group a by a.city into c orderby c.Key descending select c.Key
  • Gustavo,我刚刚在您的示例中创建了三个类,并准确执行了您问题中的查询。它毫无例外地工作。您必须显示更多详细信息:三个类以及三个对应表的 DB 模式。魔鬼会在一些细节。一般来说,像您这样的查询很好并且有效。

标签: c# .net entity-framework entity-framework-4


【解决方案1】:

更新 - 尝试在第一次选择后添加 AsEnumerable()

var query = (from o in db.offer
            from a in db.address
            from oa in db.offer_address
            where (o.identifier == oa.offeridentifier && a.identifier == oa.addressidentifier)
            group a by a.city into c
            select new
            {
               quantity = c.Count(),
               city = c.Key
            })
            .AsEnumerable()
            .OrderByDescending(a => a.quantity)
            .Select(a => a.city);

【讨论】:

  • Aducci,我没想到构建起来如此简单!谢谢你教我:)
  • Aducci,稍微改变一下怎么样...我只需要 c.Key 无数量返回但我需要通过 c.Count() 订购,所以我做了这个 from o in db.offer from a in db.address from oa in db.offer_address where (o.identifier == oa.offeridentifier &amp;&amp; a.identifier == oa.addressidentifier) group a by a.city into c orderby c.Count() descending select c.Key 不幸的是我获取Unknown column 'GroupBy1.K1' in 'field list'你能帮帮我吗?
  • 感谢您的快速回复,但我仍然遇到同样的错误并尝试foreach (var city in cities),否则我不允许这样做?
  • @Gustavo - 你能编辑你的问题以显示整个 linq 查询和 foreach 语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
相关资源
最近更新 更多