使用2 where子句与实体框架

本文关键字:实体 框架 子句 where 使用 | 更新日期: 2023-09-27 18:14:19

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

在另一个名为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>类型的操作数

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

这似乎是一个很简单的任务,但事实证明很难弄清楚。如有任何帮助,不胜感激。

如果我只使用一个where子句,查询工作得很好,但这不是我需要的。

使用2 where子句与实体框架

我试着用你的数据和一些示例数据来重新创建一些基于你的代码,所以你可以测试它的生活。

使用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

谢谢你的建议和例子。看完你的工作后,我能够得到我的解决方案使用下面的代码工作。你可以看到,我使用了你的几个例子和建议来使它工作。

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;
            }
       }
    }

再次感谢您的帮助