C# 使用Linq查看是否有任何一个子记录具有特定值
我有一组使用外键链接的表,如下所示C# 使用Linq查看是否有任何一个子记录具有特定值,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有一组使用外键链接的表,如下所示 A 1----* B 也就是说,A可以有许多B记录 我需要添加一个“where”子句来返回所有a记录,其中,若某个标志传递给我的函数,则B.isMax==true。我不知道该怎么办 public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax) { var q = from a in Context.A sel
A 1----* B
也就是说,A可以有许多B记录
我需要添加一个“where”子句来返回所有a记录,其中,若某个标志传递给我的函数,则B.isMax==true。我不知道该怎么办
public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax)
{
var q = from a in Context.A
select a;
if (AID > 0)
{
q = q.Where(c => c.AID == AID);
}
if (!string.IsNullOrEmpty(AName))
{
q = q.Where(c => c.Name.Contains(AName));
}
if (isActive != null)
{
q = q.Where(c => c.IsActive == isActive);
}
if (isMax != null)
{
// ???? Can't do this. How can I implement this kind of thing??
q = q.Where(c => c.B.IsMax == isMax);
}
List<A> ret = q.ToList();
return ret;
}
公共列表GetA(int-AID、字符串AName、bool?isActive、bool?isMax)
{
var q=来自上下文中的a。a
选择一个;
如果(辅助>0)
{
q=q,其中(c=>c.AID==AID);
}
如果(!string.IsNullOrEmpty(AName))
{
q=q.Where(c=>c.Name.Contains(AName));
}
如果(isActive!=null)
{
q=q,其中(c=>c.IsActive==IsActive);
}
如果(isMax!=null)
{
//我不能这样做。我怎样才能实现这种事情??
q=q,其中(c=>c.B.IsMax==IsMax);
}
List ret=q.ToList();
返回ret;
}
任何想法???您可以使用:
Any
用于检查序列的任何元素是否满足条件您可以使用:
Any
用于检查序列中的任何元素是否满足条件您的意思是Any
q = q.Where(c => c.B.Any(b => b.IsMax == isMax));
你是说
任何
q = q.Where(c => c.B.Any(b => b.IsMax == isMax));
你怎么想,这样做好吗
public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax)
{
return Context.A
.Where(c =>
(AID <= 0 || c.AID == AID)
&& (string.IsNullOrEmpty(AName) || c.Name.Contains(AName))
&& (isActive == null || c.IsActive == isActive)
&& (isMax == null || c.B.Any(b => IsMax == isMax))
)
.ToList();
}
公共列表GetA(int-AID、字符串AName、bool?isActive、bool?isMax)
{
返回上下文
.其中(c=>
(援助IsMax==IsMax))
)
.ToList();
}
你认为,做这样的事情是个好主意吗
public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax)
{
return Context.A
.Where(c =>
(AID <= 0 || c.AID == AID)
&& (string.IsNullOrEmpty(AName) || c.Name.Contains(AName))
&& (isActive == null || c.IsActive == isActive)
&& (isMax == null || c.B.Any(b => IsMax == isMax))
)
.ToList();
}
公共列表GetA(int-AID、字符串AName、bool?isActive、bool?isMax)
{
返回上下文
.其中(c=>
(援助IsMax==IsMax))
)
.ToList();
}
它可以是答案建议的任何
,也可以是所有
——具体取决于您的要求。此外,当您引用嵌套集合时,可能建议您执行q=q.Include(“B”)。其中(c=>c.Any/All(x=>x.IsMax==IsMax))
以避免进一步出现N+1问题。:)它可以是答案建议的Any
,也可以是All
——具体取决于您的要求。此外,当您引用嵌套集合时,可能建议您执行q=q.Include(“B”)。其中(c=>c.Any/All(x=>x.IsMax==IsMax))
以避免进一步出现N+1问题。:)