как преобразовать лямбда-выражение с телом оператора в дерево выражений - PullRequest
0 голосов
/ 28 декабря 2018

У меня проблема с моим кодом, я не знаю проблемы, потому что я новичок в c #, но я пытаюсь преобразовать проект из Asp.Net MVC в Core.может кто-нибудь помочь мне с этим кодом.

        using (var context = new UniversityDbContext())
        {
            var  payments =
                (from p in context.Payments
                    .FromSql(
                        "select * from dbo.Payments p inner join dbo.Bills b on p.BillId = b.Id where p.OrderStatus = \'Approved\' order by p.Service")
                 join b in context.Bills on p.BillId equals b.Id
                 where b.User == userId
                 select new { p, b })

            //error is from this   .Select(x =>
                 {
                     x.p.Bill = x.b;
                     return x.p;
                 }).ToList();   // To this

            var t = payments.Count();


            return payments;
        }

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Для lambda expression with statement body to an expression tree этой проблемы вы не можете передать x.p.Bill = x.b; в оператор запроса linq, попробуйте что-то вроде ниже:

using (var context = new UniversityDbContext())
{
    var  payments =
        (from p in context.Payments
            .FromSql(
                "select * from dbo.Payments p inner join dbo.Bills b on p.BillId = b.Id where p.OrderStatus = \'Approved\' order by p.Service")
            join b in context.Bills on p.BillId equals b.Id
            where b.User == userId
            select new { p, b })
            .ToList()
            .Select(x =>
            {
                x.p.Bill = x.b;
                return x.p;
            }).ToList();   // To this

    var t = payments.Count();
    return payments;
}
0 голосов
/ 28 декабря 2018

если определен Context.Payments.Bills, то вы можете использовать код ниже

  context.Payments.FromSql(
      "select * from dbo.Payments p where p.OrderStatus = 'Approved' order by p.Service").Include(x => x.Bills);

необходимо возвращать счета также внутри Платежей p.Bills

Ссылка: https://docs.microsoft.com/en-us/ef/core/querying/raw-sql#including-related-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...