Вы можете union all
четыре таблицы и отменить суммы в debittable
:
SELECT uid, amt, dat FROM credittable1 UNION ALL
SELECT uid, amt, dat FROM credittable2 UNION ALL
SELECT uid, amt, dat FROM credittable3 UNION ALL
SELECT uid, -1 * amt, dat FROM debittable
Технически, если Вы хотите видеть, является ли участник локальным администратором учетная запись , то можно добраться идентификатор безопасности (SID) из текущего пользователя через User
свойство на WindowsIdentity
класс , как так (помехи GetCurrent
, метод получает текущего пользователя Windows):
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string sid = windowsIdentity.User.ToString();
User
свойство возвращает SID пользователя, который имеет много предопределенных значений для различных групп и пользователей .
Затем Вы проверили бы, чтобы видеть, имеет ли SID следующий шаблон, указывая, что это - учетная запись локального администратора (который является известным SID) :
S-1-5- {другие части SID} -500
Или, если Вы не хотите анализировать строки, можно использовать SecurityIdentifier
класс:
// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,
null);
// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);
Однако я подозреваю, что то, что Вы действительно хотите знать, - то, если текущий пользователь является членом администраторов группа для локальной машины. Можно получить этот SID с помощью WellKnownSidType
из [1 110]:
// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
WellKnownSidType.BuiltinAdministratorsSid, null);
Затем можно проверить Groups
свойство на WindowsIdentity
из пользователя, чтобы видеть, является ли тот пользователь членом локальной группы admin, как так:
bool isLocalAdmin = windowsIdentity.Groups.
Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
Any(s => s == localAdminGroupSid);