带动态分组依据的 LINQ
LINQ with dynamic group by
我有型号:
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,
Balance = s.Sum(x => x.Balance).ToString(),
});
和其他带有 bool 参数的选项。
如何使用 .GroupBy and .Select
动态生成查询?
也许这对您有帮助:创建一个 class 代表您的 GroupBy
:
的密钥
public class StudentGroupingKey
{
public string Name { get; set; }
public DateTime? BirthDate{ get; set; }
public string UniversityName { get; set; }
}
如果 IsName
为真,则分组键的 Name
属性 将是值,否则它应该始终具有相同的值(例如 null)。在您的 Select
方法中,您必须始终拥有每个 属性,但如果相应的属性为假,则它们将为空。如果您需要这些属性不存在,则您不能使用匿名类型。在这种情况下,也许 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()
});
我有型号:
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,
Balance = s.Sum(x => x.Balance).ToString(),
});
和其他带有 bool 参数的选项。
如何使用 .GroupBy and .Select
动态生成查询?
也许这对您有帮助:创建一个 class 代表您的 GroupBy
:
public class StudentGroupingKey
{
public string Name { get; set; }
public DateTime? BirthDate{ get; set; }
public string UniversityName { get; set; }
}
如果 IsName
为真,则分组键的 Name
属性 将是值,否则它应该始终具有相同的值(例如 null)。在您的 Select
方法中,您必须始终拥有每个 属性,但如果相应的属性为假,则它们将为空。如果您需要这些属性不存在,则您不能使用匿名类型。在这种情况下,也许 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()
});