我有一个问题:
var q = (
from c in db.tblStoreRecommendations
where
itemIDsInCart.Contains(c.ItemID)
&& !itemIDsInCart.Contains(c.RecommendItemID)
select c
);
它将返回如下内容:
ID ItemID RecommendItemID Message
------------------------------------------
1 25 3 Msg here
2 26 3 Something else
3 27 8 Another message
我需要查询来过滤掉具有相同 RecommendItemID
的结果,这不应在返回的结果中出现超过一次。
如果存在两个,则可以使用其中一个(最好随机选择)。所以返回结果应该省略记录ID 1或2。
谁能告诉我如何做到这一点?谢谢!
最佳答案
一种方法是使用 GroupBy 然后从每个组中选择第一个项目:
var q = (
from c in db.tblStoreRecommendations
where
itemIDsInCart.Contains(c.ItemID)
&& !itemIDsInCart.Contains(c.RecommendItemID)
select c
).GroupBy(c => c.RecommendItemID)
.Select(g => g.First());
如果您使用它来显示随机评论,我建议将其强加到使用代码而不是 LINQ 查询中,方法是省略 First
,如下所示:
var q = (
from c in db.tblStoreRecommendations
where
itemIDsInCart.Contains(c.ItemID)
&& !itemIDsInCart.Contains(c.RecommendItemID)
select c
).GroupBy(c => c.RecommendItemID)
.Select(g => g.ToArray());
var random = new Random();
foreach (var r in q)
{
var rec = r[random.Next(r.Length)];
// use your recommendation
}
关于c# - Linq 获取不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511964/