首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找lambda表达式的帮助

寻找lambda表达式的帮助
EN

Stack Overflow用户
提问于 2016-11-16 06:06:48
回答 4查看 90关注 0票数 0

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

代码语言:javascript
复制
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表达式,但是代码出现了错误:

代码语言:javascript
复制
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;
 }

如有任何帮助或建议,将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-16 06:18:05

你的LINQ看起来没问题。但是,您似乎期望它会产生一个表单对象列表。语句不返回T1的记录集,也不返回T1的记录集。

您的代码看起来很好,您的期望是错误的。我们不可能解决这个问题。您的选择不返回T1行,您的LINQ将不会返回表单。

如果您想这样做,则必须在加入时记住该表单:

代码语言:javascript
复制
   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。

票数 0
EN

Stack Overflow用户

发布于 2016-11-16 06:14:53

你可以试试

代码语言:javascript
复制
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();

更新

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-11-16 06:15:48

我建议使用linq查询,在某些情况下更清楚:

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40625152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档