繁体   English   中英

如何将LINQ结果绑定到DataGrid

[英]How to bind LINQ result to datagrid

我将linq结果数据绑定到datagrid,但是什么也没有。 这是我的代码

        List<SearchResult> list = new List<SearchResult>() {
        new SearchResult(){ID=1,Title="Geo Prism 1995 GEO* - ABS #16213899"},
        new SearchResult(){ID=2,Title="Excavator JCB - ECU P/N: 728/35700"},
        new SearchResult(){ID=3,Title="Geo Prism GEO 1995 - ABS #16213899"},
        new SearchResult(){ID=4,Title="JCB Excavator JCB- ECU P/N: 728/35700"},
        new SearchResult(){ID=5,Title="Geo Prism GEO,GEO 1995 - ABS #16213899 GEO"},
        new SearchResult(){ID=6,Title="dog"},
        };

        var to_search = new[] { "Geo", "JCB" }.Select(x => x.ToLower()).ToArray();
        var result = from searchResult in list
                     let title = searchResult.Title.ToLower()
                     let key_string = to_search.FirstOrDefault(ts => title.Contains(ts))
                     orderby key_string == null ? -1 : title.Split(new[] { key_string }, StringSplitOptions.None).Length descending
                     group searchResult by key_string into Group
                     orderby Group.Count() descending
                     select Group;

        dataGridView2.DataSource = result;

当我运行上面的代码datagrid时什么也没显示,但是我期望datagrid应该显示ID和Title

然后我再添加一些行

List<SearchResult> listFinal = new List<SearchResult>();
foreach (var group in result)
{
     foreach (var item in group)
     {
        listFinal.Add(new SearchResult() { ID = item.ID, Title = item.Title });
     }
 }
 dataGridView2.DataSource = listFinal;

现在,datagrid正在显示数据。 所以我的问题是....是否有任何捷径可以将结果转换为列表,因此我可以将列表直接绑定到具有迭代循环的datagrid并创建一个新列表并在绑定之前填充它。 寻找指导。 谢谢

是的,只需在LINQ查询上调用.SelectMany().ToList()

dataGridView2.DataSource = result.SelectMany(e => e).ToList();

或使用适当的构造函数创建List:

dataGridView2.DataSource = new List(result.SelectMany(e => e));

这应该做

   var result = (from searchResult in list
                         let title = searchResult.Title.ToLower()
                         let key_string = to_search.FirstOrDefault(ts => title.Contains(ts))
                         orderby key_string == null ? -1 : title.Split(new[] { key_string }, StringSplitOptions.None).Length descending
                         group searchResult by key_string into Group
                         orderby Group.Count() descending
                         select Group).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM