寻找有关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;
}
任何帮助或建议都将受到高度赞赏。
答案 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);