Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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 - Fatal编程技术网

C# Linq选择包含所有包含标志且没有排除标志的行

C# Linq选择包含所有包含标志且没有排除标志的行,c#,linq,C#,Linq,我有可以通过多对多联接表应用于多个ID的属性标志: ID | Flag --------- 1 | C 2 | B 3 | B 3 | C 4 | A 5 | A 5 | C 6 | A 6 | B 7 | A 7 | B 7 | C 这涉及到: 1 C 2 B 3 BC 4 A 5 A C 6 AB 7 ABC 给定两个标志数组,Include和Exclude,我想找到所有包含标志而不包含任何排除标志的ID Include=[A,B],Exclude=[C]

我有可以通过多对多联接表应用于多个ID的属性标志:

ID | Flag
---------
1  | C
2  | B
3  | B
3  | C
4  | A
5  | A
5  | C
6  | A
6  | B
7  | A
7  | B
7  | C
这涉及到:

1   C
2  B
3  BC
4 A
5 A C
6 AB
7 ABC
给定两个标志数组,Include和Exclude,我想找到所有包含标志而不包含任何排除标志的ID

Include=[A,B],Exclude=[C]:结果ID=[6]

Include=[A],Exclude=[C]:结果ID=[4,6]

Include=[A],Exclude=[]:结果ID=[4,5,6,7]

我想在Linq中使用它,理想情况下应该使用查询语法

我已经尝试过创建它,但无法理解如何开始使用一组标准处理多个条目

from row in data
where 
    include.Contains(row.Flag) &&
    !exclude.Contains(row.Flag)
select row.ID
Dictionary flags=新字典{/*…*/};
字符串[]包括=[“A”,“B”];
字符串[]不包括=[“C”];
旗帜
.GroupBy(f=>f.Id)
.其中(g=>
includes.All(i=>g.Any(f=>f.Flag==i))&&
!排除.Any(e=>g.Any(f=>f.Flag==e)))

您需要根据
ID
进行分组,然后检查每个组是否包含所有
包含
标志,并且没有任何
排除
标志:

var q = Items.GroupBy(x => x.ID)
             .Where(g => (g.Select(x => x.Flag)
                           .Intersect(Include)
                           .Count() == Include.Count()) 

                         &&                        
                         (g.Select(x => x.Flag)
                           .Intersect(Exclude)
                           .Count() == 0))
             .Select(g => g.Key);
我正在使用
Intersect
检查每个组中是否存在
Include
/
Exclude
标志

根据您的样本数据,例如:

string[] Include = new string[] { "A", "B" };
string[] Exclude = new string[] { "C" };
输出为:

[0] = 6
上述linq查询中使用的
对象是一个
列表

class Item
{
    public int ID {get; set;}
    public string Flag { get; set; }
}

我看到几个
我想要的
s,但与我尝试的
没有任何关联。你说的Include,exclude是什么意思?我不明白你;(你想把两个参数传递给linq查询吗:Include A,B&&Exclude D然后ID=6?@Jonesy我的非常简单的linq失败了,即Include any和Exclude none,并尝试在SQL中处理它,这通常是有帮助的,但我无法理解它。同样有效,但pluc是第一个,而且更短。
class Item
{
    public int ID {get; set;}
    public string Flag { get; set; }
}