从另一个列表的列表中选择一个属性,然后使用 ToString()

本文关键字:列表 属性 ToString 一个 然后 另一个 选择 | 更新日期: 2023-09-27 18:32:19

>我需要帮助从List<Feed>内部的List<FeedItem>中选择FeedItem.Link,其中Feed.Name匹配ComboBox中的stringFeedItem.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; }
}

从另一个列表的列表中选择一个属性,然后使用 ToString()

试试这个:-

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()。:)