使用2 where子句与实体框架

时间:2015-09-23 18:11:54

标签: c# entity-framework linq

我有2个数据库表,第一个表名为LinkAnalysis,主键为LinkID,并且有一个名为LinkAnalysisCreator的字段,其中,使用C#I捕获已登录的用户作为记录的创建者。

在另一个名为Subjects的表中,我将LinkID作为外键,subjectID作为主键。

我需要编写一个查询来将登录用户与LinkAnalysisCreator和主题ID进行比较。这两个参数都传递给C#类

中的方法

我有这个C#查询

using (var context = new CADWEntities())
{
    var ownercheck = context.LinkAnalysis.Where(s => s.LinkAnalysisCreator == dbUser) &&
                     (context.Subjects.Where(c=> c.SubjectId == SubjectID));
    totalRowCount = ownercheck.Count();
    if (totalRowCount == 0)
    {
        return false;
    }
    else
    {
        return true;
    }
}

我无法得到这个编译错误信息是: 运算符&&无法应用于System.Linq.IQueryable<LinkAnalysis2.LinkAnalysi>System.Linq.IQueryable<LinkAnalysis2.Subject>类型的操作数

我已经搜索了一个解决方案但是却找不到针对不同表的multi where语句的任何示例。我在PluralSight上观看了几个小时的视频,但没有一个能够解决他们使用超过1 where条款的情况。

这似乎是一项如此简单的任务,但事实证明很难弄明白。任何帮助将不胜感激。

如果我只使用其中一个where子句,查询工作正常,但这不是我需要的。

2 个答案:

答案 0 :(得分:2)

我尝试根据您的代码使用您的数据和一些示例数据重新创建一些内容,以便您可以对其进行实时测试。

使用Lambda,您可以像这样加入表格:

您的数据

using (var context = new CADWEntities())
        {
              var ownerCheck = context.LinkAnalysis.Join(context.Subjects
                                                   x => x.LinkId,
                                                   y => y.LinkId,
                                                   (x, y) => new {Analysis = x, Subjects = y})
                                              .Where(join => join.Analysis.LinkAnalysisCreator == dbUser)
                                              .Where(join => join.Subjects.Subjects == SubjectID);

            totalRowCount = ownercheck.Count();
            if (totalRowCount == 0)
            {
                return false;
            }
            else
            {
                return true;
            }

        }

带有实例的示例数据

    var query = linkAnalysisList.Join(subjectList,
                                     x => x.LinkId,
                                     y => y.LinkId,
                                     (x, y) => new {Analysis = x, Subjects = y})
        .Where(a => a.Analysis.LinkAnalysisCreator == "Perry")
        .Where(a => a.Subjects.SubjectId == 50);

考虑到你想通过LinkId加入它吗?

以下是一个实例:https://dotnetfiddle.net/EzPCBu

答案 1 :(得分:1)

感谢您的所有建议和示例。在查看了您的工作后,我能够使用下面的代码使我的解决方案正常工作。您可以看到我使用了几个示例和建议来使其正常工作。

public Boolean EditSubject(int LinkID, int SubjectID, string dbUser )
    {


        int totalRowCount;


        using (var context = new CADWEntities())
        {
            //string dbuser = System.Web.HttpContext.Current.User.Identity.Name;
            var q = (from l in context.LinkAnalysis
                     join s in context.Subjects on l.LinkAnalysisId equals s.LinkAnalysisId
                     orderby s.LinkAnalysisId
                     where l.LinkAnalysisCreator == dbUser && s.SubjectId == SubjectID
                     select 0);
            totalRowCount = q.Count();
            if (totalRowCount == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
       }
    }

再次感谢您的帮助