简体   繁体   English

使用Entity Framework和LINQ的未知列错误

[英]Unknown column error using Entity Framework and LINQ

I started with EF yesterday and I am in trouble to transform this simple query into EF sintax 我昨天开始使用EF,我很难将这个简单的查询转换为EF sintax

Translate: 翻译:

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

Into: 成:

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());

I have tried withou success 我试过你的成功

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);

The problem occurs when try to get inside the first loop! 尝试进入第一个循环时会出现问题!

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

Line 55: foreach (var city in cities)`

With the second case: 第二种情况:

Can't group on 'A1'

UPDATE UPDATE

This code works, but its not i need 这段代码有效,但不是我需要的

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)

Or 要么

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
                });

Update - Try adding AsEnumerable() after the first select 更新 - 尝试在第一次选择后添加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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM