我有一张这样的桌子
StudID Date I II III IV V VI VII VIII
--------------------------------------------------------------
100 2-10-11 T T F F F F F T
101 2-10-11 T T T F F F F T
100 3-10-11 T F F F F F F T
100 4-10-11 T F F F F F F T现在我需要得到表中特定学生在特定月份的T的数量,StudID是一个可变字符字段Date是一个datetime字段,所有其他数据类型都是位
有什么想法吗?
发布于 2011-06-30 01:38:10
正如评论所建议的,您应该规范化您的数据。
但是,如果您无法做到这一点,您只需计算每行中的trues数量。
context.Studs.Sum(s => (s.I ? 1 : 0) + (s.II ? 1 : 0) + ... + (s.VIII ? 1 : 0));编辑:要根据StudID和月份限制总和,可以使用Where运算符
var id = "100";
var month = 10;
var set = context.Studs.Where(s => s.StudID == id;
set = set.Where(s => s.Date.Month == month);
return set.Sum(s => (s.I ? 1 : 0) + (s.II ? 1 : 0) + ... + (s.VIII ? 1 : 0));发布于 2011-06-30 01:46:53
var numberOfTrues = context.Students.
Where(x => x.StudID == 123 && x.Date.Month == studentMonth).
Sum(x => x.I.ToInt() + x.II.ToInt() + ... + x.VIII.ToInt());
// Add extension method
public static int ToInt(this bool value)
{
return value ? 1 : 0;
}发布于 2011-06-30 01:54:26
var student = context.Students.Where(s => s.StudID == id && s.Date.Month == month).Single();
var trues = from results in student.GetType().GetProperties().Where(p => p.PropertyType == typeof(bool))
let val = (bool)f.GetValue(student, null)
where val
select val;
// You can now check trues.Count()https://stackoverflow.com/questions/6524807
复制相似问题