根据类别从列表中获取记录
getting records from list based on category
查询:
List<vwBookTitleKitsSummary> theseKits = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false
orderby k.KitOrder, k.KitCode descending
select k).ToList();
这些工具包得到了如下 6 个结果(突出显示的):
我想要一个 return 每个类别中有一项的查询
例如我想要记录 K1503, T1503
即
我想要第一条以 K 开头的记录和第一条以 T
开头的记录
我试过如下:
List<vwBookTitleKitsSummary> theseKits = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false && (k.KitCode.StartsWith("K"))
orderby k.KitOrder, k.KitCode descending
select k).Take(1).ToList();
List<vwBookTitleKitsSummary> qry = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false && (k.KitCode.StartsWith("T"))
orderby k.KitOrder, k.KitCode descending
select k).Take(1).ToList();
theseKits.AddRange(qry);
这将 return 记录 KitCode - K1503, T1503
可以在一个查询中完成而不是编写两个查询并使用 AddRange,请提供任何帮助。
您可以按第一个字符分组并取每组的第一项:
from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now
&& k.IsDeleted == false
orderby k.KitOrder, k.KitCode descending
group k by k.KitCode.SubString(0,1) into grp
select new { grp.Key, k = grp.FirstOrDefault() }
如果您愿意,也可以直接 select grp.FirstOrDefault()
。
对于类别中的所有起始字母,这应该为每个类别提供 1 条记录。
List<vwBookTitleKitsSummary> firstCategoryTheseKits = _dataContext
.vwBookTitleKitsSummaries.Where(k => k.DateKitEnds > DateTime.Now
&& k.DateKitStarts <= DateTime.Now && k.IsDeleted == false).OrderBy(k => k.KitOrder)
.ThenByDescending(k => k.KitCode).GroupBy(k => k.KitCode[0]).Select(grps => grps.First)
.ToList();
如果你只想要T或K,你可以添加一个where条件如下:
List<vwBookTitleKitsSummary> firstCategoryTheseKits = _dataContext
.vwBookTitleKitsSummaries.Where(k => k.DateKitEnds > DateTime.Now
&& k.DateKitStarts <= DateTime.Now && k.IsDeleted == false
&& (k.KitCode[0] == 'T' || k.KitCode[0] == 'K')).OrderBy(k => k.KitOrder)
.ThenByDescending(k => k.KitCode).GroupBy(k => k.KitCode[0])
.Select(grps => grps.First).ToList();
抱歉,我的查询使用的是简洁的符号,而不是您的查询符号。
查询:
List<vwBookTitleKitsSummary> theseKits = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false
orderby k.KitOrder, k.KitCode descending
select k).ToList();
这些工具包得到了如下 6 个结果(突出显示的):
我想要一个 return 每个类别中有一项的查询 例如我想要记录 K1503, T1503 即
我想要第一条以 K 开头的记录和第一条以 T
开头的记录我试过如下:
List<vwBookTitleKitsSummary> theseKits = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false && (k.KitCode.StartsWith("K"))
orderby k.KitOrder, k.KitCode descending
select k).Take(1).ToList();
List<vwBookTitleKitsSummary> qry = (from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now && k.IsDeleted == false && (k.KitCode.StartsWith("T"))
orderby k.KitOrder, k.KitCode descending
select k).Take(1).ToList();
theseKits.AddRange(qry);
这将 return 记录 KitCode - K1503, T1503
可以在一个查询中完成而不是编写两个查询并使用 AddRange,请提供任何帮助。
您可以按第一个字符分组并取每组的第一项:
from k in _dataContext.vwBookTitleKitsSummaries
where k.DateKitEnds > DateTime.Now && k.DateKitStarts <= DateTime.Now
&& k.IsDeleted == false
orderby k.KitOrder, k.KitCode descending
group k by k.KitCode.SubString(0,1) into grp
select new { grp.Key, k = grp.FirstOrDefault() }
如果您愿意,也可以直接 select grp.FirstOrDefault()
。
对于类别中的所有起始字母,这应该为每个类别提供 1 条记录。
List<vwBookTitleKitsSummary> firstCategoryTheseKits = _dataContext
.vwBookTitleKitsSummaries.Where(k => k.DateKitEnds > DateTime.Now
&& k.DateKitStarts <= DateTime.Now && k.IsDeleted == false).OrderBy(k => k.KitOrder)
.ThenByDescending(k => k.KitCode).GroupBy(k => k.KitCode[0]).Select(grps => grps.First)
.ToList();
如果你只想要T或K,你可以添加一个where条件如下:
List<vwBookTitleKitsSummary> firstCategoryTheseKits = _dataContext
.vwBookTitleKitsSummaries.Where(k => k.DateKitEnds > DateTime.Now
&& k.DateKitStarts <= DateTime.Now && k.IsDeleted == false
&& (k.KitCode[0] == 'T' || k.KitCode[0] == 'K')).OrderBy(k => k.KitOrder)
.ThenByDescending(k => k.KitCode).GroupBy(k => k.KitCode[0])
.Select(grps => grps.First).ToList();
抱歉,我的查询使用的是简洁的符号,而不是您的查询符号。