我有几个数据表,1个用于按Rank排序的产品,1个用于客户购买历史记录。我想要做的就是拉出客户尚未购买的前250种产品。我已经得到了以下代码作为测试,但我被困在最后一部分。
{{1}}
如果这样可以更容易地使用Linq,我不必使用数据表吗?我只是想不出更好的方法来存储数据库查询的结果。如果该信息有用,那么这些信息是通过ODBC从ctreeSQL数据库传来的?
非常感谢任何帮助。
答案 0 :(得分:0)
我假设您想要的是没有客户购买的前250种产品,而不是每位客户的前250种产品。
创建HashSet
以保留所购买的产品ID:
var productsPurchased = new HashSet<int>(CustomerHistory.AsEnumerable().Select(ch => ch.Field<int>("ProductID")).Distinct());
查找所有未购买的产品并按排名排序,然后排在前250位:
var topSellers = (from p in Product.AsEnumerable()
where !productsPurchased.Contains(p.Field<int>("ProductId"))
orderby p.Field<int>("Rank") descending
select p)
.Take(250);