var FileProducts = from ProductsRow in ProductRangesDt.AsEnumerable()
join Filee in FileTb.AsEnumerable() on ProductsRow["GEN_CODE"].ToString() equals Filee["GEN_CODE"].ToString()
select new
{
PRODUCT_ID = ProductsRow["PRODUCT_ID"],
PRODUCT_NAME = ProductsRow["PRODUCT_NAME"],
PROVIDER_ID = ProductsRow["PROVIDER_ID"],
PROVIDER_NAME = ProductsRow["PROVIDER_NAME"],
GEN_CODE = ProductsRow["GEN_CODE"],
MIN_QUANTITY = Filee["MIN_QUANTITY"],
MAX_QUANTITY = Filee["MAX_QUANTITY"],
DISCOUNT_VALUE = Filee["DISCOUNT_VALUE"]
};
var s = (from b in FileProducts
select b.PRODUCT_ID).Distinct(); // count=285
var Products = (from ProductsRow in ProductRangesDt.AsEnumerable()
select ProductsRow["PRODUCT_ID"]).Distinct(); // count=7159
var result = Products.Except(s); // it's count should be 7159-285
我希望得到products ID
中的所有Products
而FileProducts
中不存在我怎么能这样做? result
始终将0
作为计数
答案 0 :(得分:1)
从MSDN documentation关于Except扩展方法:
此方法通过使用延迟执行来实现。眼前的 返回值是存储所有信息的对象 需要执行操作。此方法表示的查询 在通过调用对象枚举对象之前不会执行 直接使用GetEnumerator方法或在Visual C#或For中使用foreach 每个都在Visual Basic中。
因此,为了从Set区分中获得真正的价值,您需要通过使用foreach(result.Count()
)调用Count() - 方法(foreach (var r in result) { ... }
)来枚举结果。
我无法使用您的数据进行测试,但是根据我的处置测试数据,Except-extension确实提供了正确的结果。