3

我正在尝试将 Linq var 转换为 List.my c# 代码是

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = new List<HyperlinkInfo>();
        lst = obj.GetAllHyperlink();
        //lst = lst.Select(x => x.Attraction).ToList();
        var k = lst.Select(x => x.Attraction).Distinct();            
}

如果您查看上面的代码直到 Line vark = lst.Select(x => x.Attraction).Distinct();正常,现在我可以将 var k 转换为 List。

4

6 回答 6

6

根据您的评论,您需要HyperlinInfo为每个Attraction值(即字符串)提供一个对象。所以,使用分组和ToList()

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = obj.GetAllHyperlink();
        return lst.GroupBy(x => x.Attraction) // group links by attraction
                  .Select(g => g.First()) // select first link from each group
                  .ToList(); // convert result to list
}

您还可以使用morelinq DistinctBy扩展(可从 NuGet 获得):

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = obj.GetAllHyperlink();
        return lst.DistinctBy(x => x.Attraction).ToList();
}
于 2013-03-12T09:49:42.993 回答
5

使用Enumerable.ToList<TSource> Method. 只需ToList()在查询末尾添加或

return k.ToList();

所以你的方法可以是:

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = new List<HyperlinkInfo>();
        lst = obj.GetAllHyperlink();
        //lst = lst.Select(x => x.Attraction).ToList();
        var k = lst.Select(x => x.Attraction).Distinct();
        return k.ToList();
}

x.Attraction应该是HyperLinkInfo类型对象。

编辑:根据评论,它似乎x.Attraction是一个字符串,您需要Project.Bll.HyperlinkInfo在 select 语句中创建类的对象,然后返回该列表。就像是:

var k = lst.Select(new Project.Bll.HyperLinkInfo(x => x.Attraction)).Distinct();

假设Project.Bll.HyperlinkInfo构造函数接受一个字符串参数来返回一个HyperLinkInfo对象。

于 2013-03-12T09:45:10.133 回答
2

用这个:

var k = lst.Select(x => x.Attraction).Distinct().ToList();

现在kx.Attraction类型列表。如果你x.Attractionstring,使用这个:

List<string> k = lst.Select(x => x.Attraction).Distinct().ToList();
于 2013-03-12T09:45:42.633 回答
0

用于ToList()您的查询;

从. List<T>_IEnumerable<T>

List<HyperlinkInfo> k = lst.Select(x => x.Attraction).Distinct().ToList();
于 2013-03-12T09:46:30.140 回答
0

试试这个代码:

return (List<Hyperlink Info>) k
于 2013-03-12T10:17:51.830 回答
0

试试这个添加 DistinctBy 的moreLinq

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

并在您的代码中调用它:

lst.DistinctBy(x => x.Attraction).toList();
于 2013-03-12T10:26:53.350 回答