如何解决具有动态分组依据的 LINQ
我有模型:
public class Student
{
public string Name{ get; set; }
public DateTime BirthDate{ get; set; }
public string UniversityName{ get; set; }
public decimal Balance{ get; set; }
}
我有三个 bool
变量:
- IsName
- IsBirthDate
- 是大学名称
基于它们,我需要创建 GroupBy
。如果 IsBirthDate=true
那么
DbContext.Students.GroupBy(x => new { x.BirthDate }).Select(s => new
{
s.Key.BirthDate,Balance = s.Sum(x => x.Balance).ToString(),});
如果 IsBirthdate=true,IsUniversityName=true
那么
DbContext.Students.GroupBy(x => new { x.BirthDate,x.UniversityName }).Select(s => new
{
s.Key.BirthDate,s.Key.UniversityName,});
以及其他带有 bool 参数的选项。
如何使用 .GroupBy and .Select
动态生成查询?
解决方法
也许这对您有帮助:创建一个表示 GroupBy
键的类:
public class StudentGroupingKey
{
public string Name { get; set; }
public DateTime? BirthDate{ get; set; }
public string UniversityName { get; set; }
}
如果 IsName
为 true,则分组键的 Name
属性将是值,否则它应该始终具有相同的值(例如 null)。在您的 Select
方法中,您必须始终拥有每个属性,但如果相应的属性为 false,则它们将为 null。如果您需要这些属性不存在,则不能使用匿名类型。在这种情况下,dynamic
可能是一个选项。
DbContext.Students.GroupBy(x => new StudentGroupingKey
{
Name = IsName ? x.Name : null,BirthDate = IsBirthDate ? x.Birthdate : null,UniversityName = IsUniversityName ? x.UniversityName : null
}).Select(s => new
{
s.Key.BirthDate,s.Key.Name,s.Key.UniversityName,Balance = s.Sum(x => x.Balance).ToString()
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。