我对linq并不是那么擅长所以我正在尝试组织和排序。
我的查询的目标是,当某人在产品页面上时,我想显示人们也查看过的产品列表。我很确定这个查询是正确的,但我不知道如何转移到linq并让它在我的C#项目中工作。
我试图更改为linq的SQL查询是
select pv.ProductId,p.Name, count(*) as 'ProductCount'
from Products p
join ProductVieweds pv
on p.ProductID = pv.ProductId
where UserId in (
select UserId
from ProductVieweds pv
where ProductID = 1 --The 1 in this example is the product the person is viewing.
)
and p.ProductID != 1 --change this
group by pv.ProductId,p.Name
order by 'ProductCount' desc
到目前为止我能做到的。
var sub = (
from p in db.ProductsViewed
where p.ProductId == product.ProductID
select p.UserId).ToList();
var products = (from p in db.Products
join pv in db.ProductsViewed on c.ProductID equals p.ProductId
where p.ProductID != currentProduct.ProductID
where sub.Contains(pv.UserId)
select p).GroupBy(c => c.ProductID).ToList();
PeopleAlsoViewedModel model = new PeopleAlsoViewedModel
{
Products = products,
};
模型
public class PeopleAlsoViewedModel
{
public IEnumerable<Product> Products { get; set; }
}
所以我希望能够按产品分组并按计数排序,但我不知道如何做到这一点仍然得到一个IEnumerable&lt;产品&gt;请任何帮助都会很棒,如果你要投票,至少要告诉我原因。
答案 0 :(得分:0)
好的,所以我想出了如何解决我的问题,并认为我应该发布它,以后任何人都会读到这个。
查询在C#中将如下所示
var products = (from c in db.Products
join p in db.ProductsViewed on c.ProductID equals p.ProductId
where c.ProductID != CurrentProduct.ProductID
where sub.Contains(p.UserId)
group c by c.ProductID into productGrouped
orderby productGrouped.Key
select productGrouped).SelectMany(group => group.Distinct()).ToList();
SelectMany()将List&lt; IGrouping&LT; key,element&gt;&gt;进入List&lt;组件&gt;我把它区分开来,因为多个人可以查看相同的产品,否则它会返回重复项。