Tom*_*len 3 c# linq random distinct
我有查询:
var q = (
from c in db.tblStoreRecommendations
where
itemIDsInCart.Contains(c.ItemID)
&& !itemIDsInCart.Contains(c.RecommendItemID)
select c
);
Run Code Online (Sandbox Code Playgroud)
它将返回以下内容:
ID ItemID RecommendItemID Message
------------------------------------------
1 25 3 Msg here
2 26 3 Something else
3 27 8 Another message
Run Code Online (Sandbox Code Playgroud)
我需要查询来过滤掉具有相同结果的查询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());
Run Code Online (Sandbox Code Playgroud)
如果您使用它来显示随机评论,我建议将其强制使用代码而不是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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |