带分组的复杂LINQ查询(需要一些帮助)

时间:2012-04-02 05:10:47

标签: linq linq-to-entities

希望有人可以帮助解决以下问题。我在sql中有一个表,我试图返回所有匹配该值的记录。该逻辑可以基于该组具有AND。例如

行ID匹配值等于组

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”,因为它们属于同一组。等等。

谢谢!

1 个答案:

答案 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
相关问题