使用Linq(?)从列表中的列表中获取属性

时间:2014-11-26 14:30:02

标签: c# linq list select lambda

我需要帮助才能从List" FeedItem"中选择所有标题。这是List" Feed"其中Feed.Name匹配组合框中的字符串。

以下是我的尝试,这是不成功的,可能是在错误的道路上。

 var loadFeedData = fillFeed.GetAllFeeds();
            var filteredOrders =
            loadFeedData.SelectMany(x => x.Items)
                 .Select(y => y.Title)
                 .Where(z => z.Contains(flow)).ToList();

为了更好地理解事情,我也会发布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; }
}

这是我尝试使用整个代码,使用标题填充ListView,基于Listview的名称和我选择的Feed.Name。

private void listFlow_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        listInfo.Items.Clear();
        listEpisode.Items.Clear();
        if (listFlow.SelectedItem != null)
        {

            string flow = listFlow.SelectedItem.ToString();
            var loadFeedData = fillFeed.GetAllFeeds();
            var filteredOrders = loadFeedData
.Where(f => f.Name == myStringFromComboBox)
.SelectMany(f => f.Items)
.Select(fi => fi.Title);

            listEpisode.Items.Add(filteredOrders);

        }
    }

- 发布整个代码以清除一些??

3 个答案:

答案 0 :(得分:6)

完全按照你的标题和问题描述,这应该有效:

loadFeedData
    .Where(f => f.Name == myStringFromComboBox)
    .SelectMany(f => f.Items)
    .Select(fi => fi.Title);

答案 1 :(得分:1)

我相信你在寻找:

List<string> titles = loadFeedData.Where(f => f.Name == "SomeName")
                    .SelectMany(f => f.Items.Select(subItem => subItem.Title))
                    .ToList();
  • 首先,您将根据姓名
  • 过滤主列表loadFeedData
  • 然后从Title
  • 中选择List<FeedItem>
  • 稍后展平您的标题,使用SelectMany返回IEnumerable<string>
  • 可选,致电ToList以获得List<string>

答案 2 :(得分:0)

如果我理解正确,你想使用这个:

var filteredOrders = loadFeedData.Where(x => x.Name == flow)
                                 .SelectMany(x => x.Items)
                                 .Select(x => x.Title).ToList();

这将为您提供Feed.Name == flow所有Feed内的所有FeedItem项目。