在SQL Server中保存一年中所选月份并在WPF中显示的数据结构[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL Server中保存一年中所选月份并在WPF中显示的数据结构[关闭]相关的知识,希望对你有一定的参考价值。
我正在使用WPF中的C#,.NET,前端和SQL Server数据库开发软件来定期开发票,而且有些客户不希望在一年中的特定月份开具发票。此发票是定期的,与实际年份无关。发票是从具有某些参数的“合同”对象生成的,以创建定期发票。
当用户创建合同时,理想情况下,他应该看到一年中的每个月都有一个复选框,以取消选中不应开具合同的时间。现在要保存这些用户选择的月份,我需要某种数据结构;在运行时和SQL Server。
听起来我应该使用带有标志的枚举,但我完全坚持这个想法,因为它与XAML不一致(或者我没有经验,也无法让它工作)。我也可以在我的合约对象中每月写一个布尔值,但这似乎是一个愚蠢的想法,或者不是吗?
问题:在SQL Server中,我应该使用什么数据结构来保存用户在运行时选择的月份?
编辑:作为澄清的一个例子:客户可以是学校,学校在7月和8月(我来自哪里)关闭。这几个月不应该开具发票。其他公司可以在不同月份关闭,所以我不能只创建一个布尔'IsSchool'并将其用作过滤器。
就个人而言,我将它们存放在一个有两列的桥牌表中:User
和Month
除非你从你的问题中留下一些重要的细节,否则我觉得你有点过分思考。
既然不是每个人似乎都能够描绘出我的建议,这里有一个非常简短的例子:
Contract Month
1 1
1 2
1 3
2 3
2 5
2 7
3 1
3 11
3 12
可能会有很多行,但如果表被索引,无论多长时间,它都会非常快。
你当然可以使用标志来实现这一点。
为了便于说明,我们假设您将复选框的值收集到列表中:
[Flags]
enum MonthsOfYear
{
January = 1,
February = 2,
March = 4,
April = 8,
May = 16,
June = 32,
July = 64,
August = 128,
September = 256,
October = 512,
November = 1024,
December = 2048
}
public class Months
{
internal static MonthsOfYear CalculateEnum(List<bool> checkboxes)
{
MonthsOfYear value = 0;
var month = 0;
for (int i = 0; i < 12; i++)
{
month = (i == 0) ? 1 : month * 2;
if (checkboxes[i])
value |= (MonthsOfYear)Enum.Parse(typeof(MonthsOfYear), month.ToString());
}
return value;
}
internal static List<bool> GetFlagsFromEnum(MonthsOfYear value)
{
List<bool> checkboxes = new List<bool>();
var month = 0;
for (int i = 0; i < 12; i++)
{
month = (i == 0) ? 1 : month * 2;
checkboxes.Add((value & (MonthsOfYear)Enum.Parse(typeof(MonthsOfYear), month.ToString())) != 0);
}
return checkboxes;
}
}
样品用法:
List<bool> checkboxes = new List<bool>() { true, false, true, false, true, false, true, false, true, false, true, false };
Output("Original: ", checkboxes);
var selectionValue = Months.CalculateEnum(checkboxes);
var unpackedCheckboxes = Months.GetFlagsFromEnum(selectionValue);
Output("Unpacked: ", unpackedCheckboxes);
checkboxes = new List<bool>() { true, true, true, false, false, false, true, true, true, false, false, true};
Output("Original: ", checkboxes);
selectionValue = Months.CalculateEnum(checkboxes);
unpackedCheckboxes = Months.GetFlagsFromEnum(selectionValue);
Output("Unpacked: ", unpackedCheckboxes);
输出:
原文::真,假,真,假,真,假,真,假,真,假,真,假
解包::真,假,真,假,真,假,真,假,真,假,真,假
原文::真,真,真,假,假,假,真,真,真,假,假,真
解包::真,真,真,假,假,假,真,真,真,假,假,真
我几分钟就把它扯出来了。重要的是这个想法。
以上是关于在SQL Server中保存一年中所选月份并在WPF中显示的数据结构[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
求高手我想取出一年中每个月份的某一字段的数据,SQL语句该怎么写