вы можете использовать регулярные выражения что-то вроде этого:
import re
m = re.match("(\d+/\d+/\d+) (\d+:\d+) (\wM)", "3/5/2019 12:38 PM")
print(m.groups())
это напечатает кортеж с первым элементом, являющимся датой, а вторым элементом, являющимся временем, а третьим элементом PM или AM: ('3/5/2019', '12:38', 'PM')
, которые вы можете легко проанализировать сами
Редактировать
вы также можете использовать модуль datetime для анализа даты строка:
import datetime
dt = datetime.datetime.strptime("3/5/2019 12:38 PM","%d/%m/%Y %I:%M %p")
print(dt.date(), dt.hour)
, которая даст вам объект datetime, который вы можете получить всю информацию из
Чтобы объединить несколько полей в LINQ, вам нужно создать новый анонимный тип, содержащий столбцы, которые вы хотите сравнить, и затем использовать этот анонимный тип в объединении:
var results = from t1 in context.tb1
join t2 in context.tb2
on new { t1.Col1, t1.Col2, t1.Col3 } equals
new { t2.Col1, t2.Col2, t2.Col3 }
where t2.Col1 == col1 && t2.Col2 == col2 && t2.Col4 == someString
select t1;
И вот эквивалентный Лямбда-синтаксис:
var results = context.tb1.Join(
context.tb2,
t1 => new { t1.Col1, t1.Col2, t1.Col3 },
t2 => new { t2.Col1, t2.Col2, t2.Col3 },
(t1, t2) => new { t1, t2 })
.Where(o => o.t2.Col1 == col1
&& o.t2.Col2 == col2
&& o.t2.Col4 == someString)
.Select(o => o.t1);
Как вы можете видеть, в случае объединений синтаксис запроса обычно дает более легкое для чтения утверждение.
Вы также можете включить предложение WHERE в синтаксис lamda в ссылку на таблицу, к которой вы присоединяетесь.
var query = from pt in dc.ProjectTasks
join ttab in dc.TimeTaskAssigns on pt.Id equals ttab.ProjectTaskId
join ttb2 in dc.CMS_TAT_TIMEs.Where(a => a.WIP_STATUS == 'B') on ttab.CmsTimeUno equals ttb2.TIME_UNO
select pt;
Кажется очевидным, не так ли? Мне понадобилось много времени, чтобы найти это решение.