Когда я группировать по linq, запрос не работает - PullRequest
0 голосов
/ 30 октября 2019
using (var tigerContext = new TigerContext())
        {
            var stockRemaningList = from stocks in tigerContext.Stock
                join item in tigerContext.ItemsSum
                    on stocks.LOGICALREF equals item.STOCKREF  into temp 
                from x in temp.DefaultIfEmpty()

                group x by new { stocks}
                into s
                select new StocksRemaning
                {
                    StockCode = s.Key.stocks.CODE,
                    StockRef = s.Key.stocks.LOGICALREF,
                    StockName = s.Key.stocks.NAME,
                    ActualStock = s.Sum(i=>i.ONHAND)

                };
            return stockRemaningList.ToList();


        }

это моя ошибка. Как я могу решить эту ошибку

The LINQ expression 'GroupBy<TransparentIdentifier<Stock, ItemsSum>, <>f__AnonymousType10<Stock>, ItemsSum>(
    source: LeftJoin<Stock, ItemsSum, int, TransparentIdentifier<Stock, ItemsSum>>(
        outer: DbSet<Stock>, 
        inner: DbSet<ItemsSum>, 
        outerKeySelector: (s) => s.LOGICALREF, 
        innerKeySelector: (ı) => ı.STOCKREF, 
        resultSelector: (s, ı) => new TransparentIdentifier<Stock, ItemsSum>(
            Outer = s, 
            Inner = ı
        )), 
    keySelector: (ti) => new { stocks = ti.Outer }, 
    elementSelector: (ti) => ti.Inner)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

1 Ответ

0 голосов
/ 30 октября 2019

Вы должны избавиться от анонимного типа в вашем предложении group by, чтобы у движка EF не было проблем с переводом его в реальный SQL.

В качестве совета я бы предложил вам привыкнуть кдавая более значимые имена, например from leftJoined in tempJoin.DefaultIfEmpty(). Таким образом, другим программистам или вам самим в будущем не нужно будет спрашивать: «Что, черт возьми, было Х? И С?»

using (var tigerContext = new TigerContext())
{
    var stockRemaningList = 
        from stocks in tigerContext.Stock
        join item in tigerContext.ItemsSum on stocks.LOGICALREF equals item.STOCKREF  into tempJoin 
        from leftJoined in tempJoin.DefaultIfEmpty()
        group leftJoined by stocks into grouped
        select new StocksRemaning
        {
            StockCode = grouped.Key.CODE,
            StockRef = grouped.Key.LOGICALREF,
            StockName = grouped.Key.NAME,
            ActualStock = grouped.Sum(i=>i.ONHAND)
        };
    return stockRemaningList.ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...