如何将Linq var转换为List

时间:2013-03-12 09:44:24

标签: c# asp.net linq list var

我正在尝试将Linq var转换为List.my c#code is

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 var k = lst.Select(x => x.Attraction).Distinct();没问题我现在可以将var k转换为List。

6 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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是一个字符串,您需要在select语句中创建类Project.Bll.HyperlinkInfo的对象,然后返回该列表。类似的东西:

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

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

答案 2 :(得分:1)

使用此:

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

现在kx.Attraction类型的列表。如果您的x.Attractionstring,请使用此字段:

List<string> k = lst.Select(x => x.Attraction).Distinct().ToList();

答案 3 :(得分:0)

使用ToList()查询;

  

List<T>创建IEnumerable<T>

List<HyperlinkInfo> k = lst.Select(x => x.Attraction).Distinct().ToList();

答案 4 :(得分:0)

试试这段代码:

return (List<Hyperlink Info>) k

答案 5 :(得分:0)

尝试添加moreLinq的DistinctBy:

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();