我有一张这样的 table

 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 数,即表中的 Trues
StudID 是一个 varchar 字段
日期是日期时间字段
以及所有其他带位的数据类型

有任何想法吗?

最佳答案

正如评论所暗示的那样,您应该规范化您的数据。

但是,如果您无法做到这一点,您只需计算每行中的 true 数即可。

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));

关于c# - 如何在 LINQ to SQL 中计算表中的 true 数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6524807/

10-12 18:52