寻找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对于我的情况,我必须使用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;
}如有任何帮助或建议,将不胜感激。
发布于 2016-11-16 06:18:05
你的LINQ看起来没问题。但是,您似乎期望它会产生一个表单对象列表。语句不返回T1的记录集,也不返回T1的记录集。
您的代码看起来很好,您的期望是错误的。我们不可能解决这个问题。您的选择不返回T1行,您的LINQ将不会返回表单。
如果您想这样做,则必须在加入时记住该表单:
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。
发布于 2016-11-16 06:14:53
你可以试试
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();发布于 2016-11-16 06:15:48
我建议使用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();
}
}https://stackoverflow.com/questions/40625152
复制相似问题