使用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子句,查询工作得很好,但这不是我需要的。
我试着用你的数据和一些示例数据来重新创建一些基于你的代码,所以你可以测试它的生活。
使用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;
}
}
}
再次感谢您的帮助