我需要在distinct
的一列上使用LINQ
检索整个行集合。
我使用Distinct
获取GroupBy
,但它只选择一列值,而我需要整行。
**此列表返回ThumbnailAltText列中唯一的集合BUT仅返回该列而不是整行值。所以我不得不使用var
而不是type
var catlist = _db.ac_Categories
.Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null
&& (!c.ThumbnailAltText.StartsWith("gifts/")
&& !c.ThumbnailAltText.StartsWith("email/")
&& !c.ThumbnailAltText.StartsWith("news/")
&& !c.ThumbnailAltText.StartsWith("promotions/")
&& !c.ThumbnailAltText.StartsWith("the-knowledge/"))).ToList()
.GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList();
.GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList();
同样的事情对type
不起作用,我收到了错误。
List<ac_Categories> catlist = _db.ac_Categories
.Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null
&& (!c.ThumbnailAltText.StartsWith("gifts/")
&& !c.ThumbnailAltText.StartsWith("email/")
&& !c.ThumbnailAltText.StartsWith("news/")
&& !c.ThumbnailAltText.StartsWith("promotions/")
&& !c.ThumbnailAltText.StartsWith("the-knowledge/"))).ToList()
.GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList();
.GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList();
错误:The 'Distinct' operation cannot be applied to the collection ResultType of the specified argument.
编辑:我需要一个集合,而不是第一个记录,ID和其他列只包含diff值ThumbnailAltText我包含重复项
答案 0 :(得分:3)
Distinct
返回唯一字符。我假设您要返回所有行,但根据ThumbnailAltText
,每一行都应该是唯一的,这是正确的吗?
然后这应该有效,它只返回每组的第一行:
var catlist = _db.ac_Categories
.Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null
&& (!c.ThumbnailAltText.StartsWith("gifts/")
&& !c.ThumbnailAltText.StartsWith("email/")
&& !c.ThumbnailAltText.StartsWith("news/")
&& !c.ThumbnailAltText.StartsWith("promotions/")
&& !c.ThumbnailAltText.StartsWith("the-knowledge/")))
.GroupBy(c=> c.ThumbnailAltText.Trim())
.ToList()
.Select(g => g.First())
.ToList();
答案 1 :(得分:1)
您也可以像这样使用Distinct(IEnumerable, IEqualityComparer)扩展程序
public class CategotiesEqualityComparer : IEqualityComparer<ac_Categories>
{
public bool Equals(ac_Categories x, ac_Categories y)
{
return x.ThumbnailAltText.Trim() == y.ThumbnailAltText.Trim();
}
public int GetHashCode(ac_Categories obj)
{
return obj.ThumbnailAltText.Trim().GetHashCode();
}
}
List<ac_Categories> catlist = _db.ac_Categories
.Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null
&& (!c.ThumbnailAltText.StartsWith("gifts/")
&& !c.ThumbnailAltText.StartsWith("email/")
&& !c.ThumbnailAltText.StartsWith("news/")
&& !c.ThumbnailAltText.StartsWith("promotions/")
&& !c.ThumbnailAltText.StartsWith("the-knowledge/")))
.Distinct(new CategotiesEqualityComparer())
.ToList()