从另一个列表的列表中选择一个属性,然后使用 ToString()
本文关键字:列表 属性 ToString 一个 然后 另一个 选择 | 更新日期: 2023-09-27 18:32:19
>我需要帮助从List<Feed>
内部的List<FeedItem>
中选择FeedItem.Link
,其中Feed.Name
匹配ComboBox
中的string
,FeedItem.Title
匹配ComboBox
中的string
。我只需要选择一个Link
值,而不是全部。
我正在尝试使用 Linq 执行此操作,但在控制台中记录以下内容,而不是 mp3link 即:
System.Linq.Enumerable+WhereSelectEnumerableIterator'2[Logic.Entities.FeedItem,System.String]。
我的 Linq 代码:
var feedName = listFlow.SelectedItem.ToString();
var feedItemTitle = listEpisode.SelectedItem.ToString();
var loadFeedData = feedService.GetAllFeeds();
var feedMp3Link = loadFeedData.Where(x => x.Namn == feedName)
.SelectMany(x => x.Items)
.Where(x => x.Title == feedItemTitle)
.Select(x => x.Link).ToString();
Console.WriteLine(feedMp3Link);
这是类 Feed.cs 的样子:
public class Feed : IEntity
{
public string Url { get; set; }
public Guid Id { get; set; }
public string Category { get; set; }
public string Namn { get; set; }
public string UppdateInterval { get; set; }
public List<FeedItem> Items { get; set; }
}
试试这个:-
string link = feeds.Where(x => x.Namn == feedName)
.SelectMany(x => x.Items)
.FirstOrDefault(x => x.Title == feedItemTitle).Link;
请注意,当找不到物品时,它可能会抛出Null reference exception
。或者,您也可以使用它:-
string link = feeds.Where(x => x.Namn == feedName)
.SelectMany(x => x.Items)
.Where(x => x.Title == feedItemTitle)
.Select(x => x.Link).FirstOrDefault();
您正在获得输出文本,因为您正在将整个枚举(即最终调用 Select()
的返回值)转换为字符串。由于 LINQ 枚举类不会覆盖 ToString()
,这只会为您提供类型名称,即您在输出中看到的内容。
相反,您说您想要结果枚举中的一个值。那看起来更像这样:
var item = loadFeedData.Where(x => x.Namn == feedName)
.SelectMany(x => x.Items)
.FirstOrDefault(x => x.Title == feedItemTitle);
Console.WriteLine(item != null ? item.Link.ToString() : "Not found");
请注意,根据您问题的措辞,上述假设Link
属性还不是string
。显然,如果它已经是一个 string
,你不需要打电话给ToString()
。:)