我如何将Linq变量转换为列表

本文关键字:转换 列表 变量 Linq | 更新日期: 2023-09-27 18:03:33

我正试图将Linq变量转换为列表。我的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();            
}

如果你看上面的代码,直到行var k = lst.Select(x => x.Attraction).Distinct();是ok的,现在我可以将var k转换为列表。

我如何将Linq变量转换为列表

根据您的评论,您需要单个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();
}

使用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类型的对象。

EDIT:根据注释,x.Attraction似乎是一个字符串,您需要在选择语句中创建类Project.Bll.HyperlinkInfo的对象,然后返回该列表。比如:

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

假设Project.Bll.HyperlinkInfo构造函数接受一个string形参返回HyperLinkInfo对象。

使用

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

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

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

使用ToList()来查询;

IEnumerable<T>创建List<T>

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

try this add DistinctBy of 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();

试试下面的代码:

return (List<Hyperlink Info>) k
相关文章: