我如何将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转换为列表。
根据您的评论,您需要单个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();
现在k
是x.Attraction
类型的列表。如果你的x.Attraction
是string
,使用这个:
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