来自数据表的 C# LINQ 查询

标签 c# asp.net linq

我正在尝试在我们正在使用的搜索页面上实现 LINQ 查询。从初始查询返回的数据布局如下:

ListID ListName TagId TagValue
1      Name1    1     Tag1
1      Name1    2     Tag2
2      Name2    3     Tag3

基本上,列表是搜索类别,标签是搜索词。我想要做的是带回这个列表,将它分成唯一的列表,然后在页面上显示相关的标签。

我已将数据加载到数据表中,现在我正尝试将列表名称放入我的 SearchCategories 对象中:

public class SearchCategories
{
    public int SearchCategoryId { get; set; }

    public string SearchCategoryName { get; set; }

    public SearchTags searchTags { get; set; }

    public List<SearchTags> lstSearchTags= new List<SearchTags>();
}

和 SearchTag 类:

public class SearchTags
{
    public int SearchTagId { get; set; }

    public string SearchTagValue { get; set; }
}

然后将标签放入对象的相关列表中。

这是我正在使用的代码:

dtLists.Load(reader);

var distinctValues = dtLists.AsEnumerable()
   .Select(row => new SearchCategories
   {
   SearchCategoryId = row.Field<int>("ListNameID"),
   SearchCategoryName = row.Field<string>("listName")
   })
   .Distinct();

LINQ 较新,但认为这应该更容易。提前致谢。

最佳答案

这将完成工作:

var result = dtLists.AsEnumerable()
        .GroupBy(m => new
        {
            ListID = m.Field<int>("ListID"),
            ListName = m.Field<string>("ListName")
        }, m => m)
        .Select(m => new
        {
            m.Key.ListID,
            m.Key.ListName,
            Tags = m.Select(x => new { x.Field<int>("TagId"), x.Field<string>("TagValue") })
        });

当然你必须映射到你的类型...

关于来自数据表的 C# LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41225894/

相关文章:

c# - 原生 C/C++ 代码的 C++/CLI 包装器,无法在 Unity3D 中加载

c# - websocket 连接失败?

c# - 具有多个值的 ArrayList c#

c# - 如何从方法返回变量数据类型

c# - 如何使用 C# 在类中使用 Datareader

c# - 生成通用列表的组合

c# - 您可以将 LINQ 与内存对象一起使用而不是 SQL Server 查询来提高性能吗?

c# - UnionBy Linq 实现

c# - 这是将 List<T> 从模型转换为 View 中的 ObservableCollection<T> 的最佳方式吗?

c# - 在 asp.net (javascript) 中创建自定义的 "Yes/No"警报框 - 第 2 部分