LINQ JOIN与WHERE条件

时间:2016-07-13 19:57:50

标签: asp.net-mvc entity-framework linq lambda

我在使用lambda表达式创建LINQ查询时遇到问题。我需要加入两个表并制定一些条件。我有两个表MSR和BOMDetail。

MSR有theese专栏 - > MSRID,PN,买方,工厂EditDate。 BomDetail有theese专栏 - > BOMID,PN,AltQty,Plant,EditDate。

我需要将此查询写入LINQ。

SELECT MSR.PN, Buyer, MSR.EditDate, MSR.Plant FROM MSR 
JOIN BomDetail bd ON MSR.PN = bd.PN AND MSR.Plant = bd.Plant
WHERE LEN(ISNULL(bd.AltQty,''))>0

我需要制作2个条件PN必须等于表格和工厂之间。 我在asp.net MVC中有结果ViewModel。

public class MSRViewModel
{
    public string PN { get; set; }
    public string Buyer { get; set; }
    public string Plant { get; set; }
    public DateTime EditDate { get; set; }

}

这是我的样本,它工作正常,但我不知道我必须在哪里写bd.Plant = MSR.Plant的第二个条件。

var data = DbContext.BomDetails.Where(x => !string.IsNullOrEmpty(x.AltQty))
                        .Join(DbContext.MSRs
                        , bd => bd.PN,
                        msr => msr.PN,
                        (bd, msr) => new MSRViewModel
                        {
                            PN = msr.PN,
                            Buyer = msr.Buyer,
                            Plant = msr.Plant,
                            EditDate = msr.EditDate
                        }).ToList().AsEnumerable();

感谢。

1 个答案:

答案 0 :(得分:2)

您可以按照以下方式执行此操作:

var data = DbContext.BomDetails.Where(x => !string.IsNullOrEmpty(x.AltQty))
                    .Join(DbContext.MSRs
                    , bd => new { bd.PN, bd.Plant },
                    msr => new { msr.PN, msr.Plant },
                    (bd, msr) => new MSRViewModel
                    {
                        PN = msr.PN,
                        Buyer = msr.Buyer,
                        Plant = msr.Plant,
                        EditDate = msr.EditDate
                    }).ToList().AsEnumerable();