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

时间:2014-11-26 18:13:58

标签: c# linq list

我需要帮助从FeedItem.LinkList<FeedItem>选择List<Feed> Feed.NamestringComboBox中的FeedItem.Title匹配string {1}}与ComboBox中的Link匹配。我只需要选择一个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); 值,而不是所有值。

我正在尝试使用Linq,但在控制台中记录以下内容,而不是mp3link:

System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [Logic.Entities.FeedItem,System.String]。

我的Linq代码:

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; }
}

这就是Feed.cs类的样子:

{{1}}

2 个答案:

答案 0 :(得分:0)

试试这个: -

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();

答案 1 :(得分:0)

您正在查看输出文本,因为您要将整个枚举(即最终调用的返回值转换为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()。 :)