我正在尝试将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。
答案 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();
现在k
是x.Attraction
类型的列表。如果您的x.Attraction
为string
,请使用此字段:
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();