我正在使用充滿項目之間相似性的矩陣。我將它們保存爲數據庫中的對象列表。 Similarity對象如下所示:LINQ中的條件GroupBy()
public class Similarity
{
public virtual Guid MatrixId { get; set; } //The id of the matrix the similarity is in
public virtual Guid FirstIndex { get; set; } //The id of the item of the left side of the matrix
public virtual Guid SecondIndex { get; set; } //The id of the item of the top side of the matrix
public virtual double Similarity { get; set; } //The similarity
}
用戶可以查看這些項目。我想要檢索與用戶已審閱的項目「相似」的項目列表。問題是我無法確定物品的ID是在FirstIndex
還是SecondIndex
。我寫了一些代碼,它可以做我想做的,但是我想知道這是否可能在1語句中。
var itemsNotReviewed = Similarities.Where(x => !itemsReviewed.Contains(x.SecondIndex))
.GroupBy(x => x.SecondIndex)
.ToList();
itemsNotReviewed.AddRange(Similarities.Where(x => !itemsReviewed.Contains(x.FirstIndex))
.GroupBy(x => x.FirstIndex)
.ToList());
哪裏itemsReviewed
是項目的GUID的列表,用戶已審查並在那裏Similarities
是類似於用戶已檢查的項目中所有物品的清單。我檢索列表使用此功能:
return (from Row in _context.SimilarityMatrix
where itemIds.Contains(Row.FirstIndex) || itemIds.Contains(Row.SecondIndex)
select Row)
.Distinct()
.ToList();
其中itemIds
是用戶已經檢查的項目中的GUID的列表。
有沒有一種方法可以通過基於Where子句的第一個或第二個索引進行分組?
請讓我知道,如果我應該詳細說明!
霍普(HTTP [在LINQ結合WHERE子句和GROUP BY]:// stackoverflow.com/a/802337/3796048)可能會幫助你 –
@MohitShrivastava你如何確定哪個索引是分組的關鍵? – RandomStranger