希望有人可以帮助解决以下问题。我在sql中有一个表,我试图返回所有匹配该值的记录。该逻辑可以基于该组具有AND。例如
1>>> 1>>> 1 GT;>>一个>>>一个>>> 1
2>>> 1>>>一个>>> B个;>> 0 GT;>> 1
3>>> 2>>>一个>>>一个>>> 1 GT;>> 2
4>>> 3>>> B个;>> c取代;>> 0 GT;>> 3
5>>> 4>>>一个>>>一个>>> 1 GT;>> 4
在这种情况下,相等列中的1表示“相等”,0表示“不相等”
linqed之后的这个数据集将返回记录1,2,3,因为在第1行中,a =(来自列Equal)a AND a = =(从列等于)b。第1行和第2行是“AND”,因为它们属于同一组。等等。
谢谢!
答案 0 :(得分:1)
不确定这是否是您所得到的,因为您的问题很难理解,并且您的示例数据似乎可能包含一些拼写错误。但是,我在下面为你建模了类似的东西。注意我改变了第1行,因为它看起来像你有一个拼写错误,我改变了第5行,所以它实际上是一个被排除的情况,否则你会得到一切。
public class Test
{
public int Row {get; set;}
public int ID {get; set;}
public string Match {get; set;}
public string Value {get; set;}
public int Equal {get; set;}
public int Group {get; set;}
}
void Main()
{
var items = new List<Test>();
items.Add(new Test() {Row = 1, ID = 1, Match = "a", Value = "a", Equal = 1, Group = 1});
items.Add(new Test() {Row = 2, ID = 1, Match = "a", Value = "b", Equal = 0, Group = 1});
items.Add(new Test() {Row = 3, ID = 2, Match = "a", Value = "a", Equal = 1, Group = 2});
items.Add(new Test() {Row = 4, ID = 3, Match = "b", Value = "c", Equal = 0, Group = 3});
items.Add(new Test() {Row = 5, ID = 4, Match = "a", Value = "b", Equal = 1, Group = 4});
var result = items.GroupBy(i => i.Group)
.Where(g => g.All(t =>
(t.Equal == 1 && t.Match == t.Value) ||
(t.Equal == 0 && t.Match != t.Value)))
.SelectMany(g => g.Select(i => i));
foreach (var i in result)
{
Console.WriteLine("Row: {0}, ID: {1}", i.Row, i.ID);
}
}
结果:
Row: 1, ID: 1
Row: 2, ID: 1
Row: 3, ID: 2
Row: 4, ID: 3