2017-05-25 58 views
1

说我有MyTable的与MyField1和MyField2,MyField3填充如下拉姆达查询过滤掉重复和空

MyField1  MyField2 MyField3 
A1   null  x 
A1   123234  x 
B1   47686876 x 
C1   null  x 
C1   8856578  x 
D1   null  x 
E1   23423  y 

我如何写一个lambda查询只带回记录,其中MyField3 =“x”和有: 只发生一次MyField1,OR 哪里有两次发生,只接受一个MyField2被填充的地方? MyField2最多只会出现2次。

到目前为止,我有

MyList = db.MyTable.Where(p => p.MyField3 == "x") 

我知道这是不好的表格设计(明显不同的字段名),但我只是继承了它。 感谢

回答

2

下面的代码使用

MyList = db.MyTable.Where(p => p.MyField3 == "x" && p.MyField2!=null).Distinct(); 
+0

感谢您的回答,我怎么也带回来,我只有一个在我的文章中的数据示例中发生MyField1,D1? – DarkW1nter

+0

我猜你在查询上有一个UNION,有一个带回单个事件... – DarkW1nter

0

这一条给你的记录,其中MyField2 is nullMyField1 is unique

var MySecondList = db.MyTable.Where(p => p.MyField2 == null) 
    .GroupBy(g => new 
    { 
     myField1 = g.MyField1 
    }) 
    .Select(s => new 
    { 
     count = s.Count(), 
     myField1 = s.Key.myField1 
    }).Where(k => k.count == 1).ToList();