寻求LINQ lambda表达式的帮助

时间:2016-11-16 06:06:48

标签: c# linq lambda visual-studio-2015 expression

寻找有关LINQ lambda表达式的帮助。我需要从两个连接表中选择数据。像这样的SQL查询:

declare @formName

select T1.Title, T1.Text, T2.Name, T1.Active, T1.ConfirmationText, T1.URL
From T1   join T2 on T2.FormCodeID = T1.FormCodeID
Where T1.Active =1 and T2.Name = @formName

根据我的情况,我必须使用LINQ lambda表达式,但是代码出错:

public IEnumerable<UModel.Form> GetForms(string formName)
    {
        IEnumerable<UModel.Form> form = null;

        using (var context = new UASContext())
        {
            form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID,
                (f, fc) => new { Active = f.Active, FormName = fc.FormName} )
                .Where(f => (f.Active == true)) 
                .Where (fc => (fc.FormName ==formName)).ToList();
        }

        return form;
 }

任何帮助或建议都将受到高度赞赏。

4 个答案:

答案 0 :(得分:1)

你可以尝试

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID,
                (f, fc) => new { Active = f.Active, FormName = fc.FormName} )
                .Where(f => f.Active == true && f.FormName==formName).ToList();

<强>更新

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID,
                    (f, fc) => new { Form = f, FormCode= fc} )
                    .Where(f => f.Form.Active == true && f.FormCode.FormName==formName)
                    .Select(x=>x.Form)
                    .ToList();

答案 1 :(得分:0)

我推荐一个linq查询,在某些情况下它更清楚:

public IEnumerable<UModel.Form> GetForms(string formName)
{
    using (var context = new UASContext())
    {
        var query = from form in context.Forms
            join formCode in context.FormCode on form.FormCodeID equals formCode.FormCodeID
            where form.Active == true and formCode.FormName == formName
            select form;

        return query.ToList();
    }
}

答案 2 :(得分:0)

您的LINQ看起来不错。但是你似乎期望它会产生一个Form对象列表。你的SQL语句返回T1的记录集,你的LINQ都没有。

您的代码看起来不错,您的期望是错误的。我们无法解决这个问题。您的SELECT不返回T1行,LINQ不会返回Forms。

如果你想这样做,你必须在加入时记住表格:

   form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc =>  fc.FormCodeID,
            (f, fc) => new { Form = f, Active = f.Active, FormName = fc.FormName} )
            .Where(temp => (temp.Active && temp.FormName == formName))
            .Select(temp => temp.Form).ToList();

但那相当于你的SQL。

答案 3 :(得分:0)

我认为LINQ查询的问题是,您从方法返回IEnumerable<UModel.Form>并选择new { Active = f.Active, FormName = fc.FormName}即匿名对象。您应该选择并返回Form实体的集合。

您可以更改查询以选择表单,如下所示:

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, (f, fc) => new { Form = f, FormName = fc.FormName }).Where(x => (x.Form.Active && x.FormName == formName)).Select(x => x.Form);