要排除重复的,你可以使用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