要排除重複的,你可以使用Distinct
LINQ方法:
validPicSummaries =
(from x in db.PicsTagsUsers
where x.tag == searchterm && x.enabled == 1
select new MyImageClass
{
PicName = x.picname,
Username= x.Username,
Tag = x.tag
})
.Distinct()
.Take(50);
您需要確保的對象是可比性,使具有相同PicName
,Username
兩個MyImageClass
對象,和Tag
被認爲是相等的(或者你希望認爲其中兩個是相等的)。
如果您想爲這種情況設置自定義比較器,您可以編寫一個實現IEqualityComparer<T>
的小類。例如:
private class MyImageClassComparer : IEqualityComparer<MyImageClass>
{
public bool Equals(MyImageClass pMyImage1, MyImageClass pMyImage2)
{
// some test of the two objects to determine
// whether they should be considered equal
return pMyImage1.PicName == pMyImage2.PicName
&& pMyImage1.Username == pMyImage2.Username
&& pMyImage1.Tag == pMyImage2.Tag;
}
public int GetHashCode(MyImageClass pMyImageClass)
{
// the GetHashCode function seems to be what is used by LINQ
// to determine equality. from examples, it seems the way
// to combine hashcodes is to XOR them:
return pMyImageClass.PicName.GetHashCode()
^pMyImageClass.UserName.GetHashCode()
^pMyImageClass.Tag.GetHashCode();
}
}
然後當你調用不同:
...
.Distinct(new MyImageClassComparer())
.Take(50);
難道我需要排除標籤,這樣我剛剛得到的PIC的第一個實例,如果它有很多的標籤?看起來不錯,就像我忽略了這個明顯的解決方案。我會馬上回來...... – Dave 2013-05-07 00:44:35
@Dave我不確定這些屬性的含義。這取決於你如何認爲它們是重複的。 – 2013-05-07 00:48:09
優秀。謝謝。 – Dave 2013-05-07 01:18:34