Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq查看是否有任何一个子记录具有特定值_C#_Linq_Linq To Entities - Fatal编程技术网

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问题。:)