我正在尝试在我们正在使用的搜索页面上实现 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/