2013-05-07 49 views
0

这是我工作的LINQ到数据集查询。我已经添加了第四个表,并且我想向查询中添加一个NOT IN类型过滤器,其中query1.dedpk不在deduct.dedpk中。不知道该怎么做。LINQ到数据集SELECT NOT IN到表?

var main = dsTemp.Tables["Maindata"].AsEnumerable(); 
    var pg = dsTemp.Tables["pgto"].AsEnumerable(); 
    var py = dsTemp.Tables["pyto"].AsEnumerable(); 
    var deduct = dsTemp.Tables["Deduct"].AsEnumerable(); 

    var query1 = from mainrow in main 
     join pgrow in pg on mainrow.Field<string>("pgpk") equals pgrow.Field<string>("pgpk") 
     join pyrow in py on mainrow.Field<string>("pypk") equals pyrow.Field<string>("pypk") 
     into griddata 
     select new 
     { 
     lastname = mainrow.Field<string>("lastname"), 
     firstname = mainrow.Field<string>("firstname"), 
dedpk = mainrow.Field<string>("dedpk"), 
     }; 

感谢

+0

你希望所有'dedpk'领域或整个行?前者更容易使用'Enumerable.Except',后者将是一个linq左外连接。 – 2013-05-07 20:04:10

+0

有没有行扣除我想要的。这只是一个PK排除列表。我需要的所有行都在主表中。 – 2013-05-08 11:23:29

回答

0
var query1 = from mainrow in main 
     join pgrow in pg on mainrow.Field<string>("pgpk") equals pgrow.Field<string>("pgpk") 
     join pyrow in py on mainrow.Field<string>("pypk") equals pyrow.Field<string>("pypk") 
     into griddata 
     where 
     !deduct.Any(x => x.Field<string>("dedpk") == mainrow.Field<string>("dedpk")) 
     select new 
     { 
     lastname = mainrow.Field<string>("lastname"), 
     firstname = mainrow.Field<string>("firstname"), 
     dedpk = mainrow.Field<string>("dedpk"), 
     }; 
+0

谢谢,效果很好! – 2013-05-09 12:17:35