如何将 Linq var 转换为 List
Posted
技术标签:
【中文标题】如何将 Linq var 转换为 List【英文标题】:How can i convert Linq var to List 【发布时间】:2013-02-27 18:20:29 【问题描述】:我正在尝试将 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 var k = lst.Select(x => x.Attraction).Distinct();
是好的 现在我可以将 var k 转换为 List。
【问题讨论】:
类HyperLinkInfo
的属性是什么?
【参考方案1】:
根据您的 cmets,您需要为每个 Attraction
值(即字符串)提供一个 HyperlinInfo
对象。所以,使用分组和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();
【讨论】:
【参考方案2】:使用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
对象。
【讨论】:
它不起作用..错误消息是“错误 8 无法将类型 'System.Collections.Generic.ListHyperLinkInfo
类型对象。
仍然无法正常工作,并且 x.Attraction 是 HyperLinkInfo 类型对象的一部分。【参考方案3】:
使用这个:
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();
【讨论】:
不工作...出现类似...无法将类型“System.Collections.Generic.Listx.Attraction
,它是字符串。您想如何将string
转换为HyperLinkInfo
?【参考方案4】:
在查询中使用ToList()
;
从
IEnumerable<T>
创建一个List<T>
。
List<HyperlinkInfo> k = lst.Select(x => x.Attraction).Distinct().ToList();
【讨论】:
不工作....出现错误,例如无法将类型 'System.Collections.Generic.List试试这个添加 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();
【讨论】:
【参考方案6】:试试这个代码:
return (List<Hyperlink Info>) k
【讨论】:
以上是关于如何将 Linq var 转换为 List的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 LINQ 将 List<string> 中的所有字符串转换为小写?
无法将“Newtonsoft.Json.Linq.JArray”类型的对象转换为“System.Collections.Generic.List”类型