帮助我转换从SQL到linq嵌套lambda表达式与EntityFramework

本文关键字:lambda 嵌套 表达式 EntityFramework linq 转换 SQL 帮助 | 更新日期: 2023-09-27 17:53:18

我试图从SQL中带来一些数据,但我不能用Linq,在T-SQL这个工作:

select *
from MTRBatch MB
Inner Join MTR M on MB.Id = M.MTRBatchId
Inner JOIN MTRHeats MH on M.Id = MH.MTRId
LEFT OUTER JOIN Vendor V on MB.VendorId = v.Id
Inner Join Manufacturer MF on MB.ManufacturerId = MF.Id
Where MB.ManufacturerId = 1
AND MH.Heat = 'z01'

我需要所有的树,但是有那个过滤器。

我试了一下,但没有工作:

MTRBatches
.Include(x => x.MTRs.Select(m => m.MTRHeats))
.Include(x => x.Manufacturer)
.Include(x => x.Vendor)
.Where(x => (x.Manufacturer.Id == 1));
.Where(x => x.MTRs.Any(m => m.MTRHeats.Any(h => h.Heat == 'z01')));

帮助我转换从SQL到linq嵌套lambda表达式与EntityFramework

这应该有帮助;dataContext是您的Entity Framework container实例的名称。

var result = dataContext.MTRBatches
    .Join(dataContext.MTRs,
        mb => mb.Id,
        mtr => mtr.MTRBatchId,
        (mb, mtr) => new{ Batch = mb, MTR = mtr })
    .Join(dataContext.MTRHeats,
        x => x.MTR.Id,
        mh => mh.MTRId,
        (x, mh) => new{ Batch = x.Batch, MTR = x.MTR, Heat = mh })
    .Join(dataContext.Vendors.DefaultIfEmpty(),
        x => x.Batch.VendorId,
        v => v.Id,
        (x, v) => new{ Batch = x.Batch, MTR = x.MTR, Heat = x.Heat, Vendor = v })
    .Join(dataContext.Manufacturers,
        x => x.Batch.ManufacturerId,
        mf => mf.Id,
        (x, mf) => new{ Batch = x.Batch, MTR = x.MTR, Heat = x.Heat, Vendor = x.Vendor, Manufacturer = mf})
    .Where(x => x.Manufacturer.Id == 1 && x.Heat.Heat == "z01");
相关文章: