LINQ Join Where Clause

вы можете использовать регулярные выражения что-то вроде этого:

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, который вы можете получить всю информацию из

22
задан Ricardo Deano 23 August 2010 в 12:48
поделиться

2 ответа

Чтобы объединить несколько полей в 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);

Как вы можете видеть, в случае объединений синтаксис запроса обычно дает более легкое для чтения утверждение.

53
ответ дан 29 November 2019 в 03:43
поделиться

Вы также можете включить предложение 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;

Кажется очевидным, не так ли? Мне понадобилось много времени, чтобы найти это решение.

11
ответ дан 29 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: