2013-05-07 101 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