我需要帮助从FeedItem.Link
内List<FeedItem>
选择List<Feed>
Feed.Name
,string
与ComboBox
中的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}}
答案 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()
。 :)