LINQ к SQL и Соединению две таблицы с ИЛИ пункт

У нас есть API с сотнями результатов в каждом запросе или, возможно, пост / патч. Мы по-прежнему используем:

'data.relationships.users.data.*.id' => [
    'string',
    'unique:api_groups,name,' . ($this->route('group')->id ?? 0),
]

Так что для вас

'contacts.*.email' => 'required|email|unique:exists:users,id'

Работает отлично. Это не становится более сложным или что-то еще.

5
задан Lucas 26 April 2009 в 17:52
поделиться

2 ответа

Чтобы достичь желаемого результата, необходимо выполнить фильтрацию предикатов и объединить их в одном операторе.

Dim myCriteria() = {"test", "bed"}
Dim test = from d in _context.Documents _
           join p in _context.Plans on d.ID Equals p.ID _
           where (myCriteria.Contains(d.Name) OR _
                   myCriteria.Contains(d.Descrition)) _
           OR (myCriteria.Contains(p.Name) OR _
                 myCriteria.Contains(p.Description)) _
           select Document = d.Name, Plan = p.Name
3
ответ дан 14 December 2019 в 19:25
поделиться

Это происходит потому, что вы делаете «первый проход», который фильтрует планы и документы, соответствующие вашим предикатам, а затем затем объединяют только эти результаты, эффективно выполняя и . Как сказал Базилио, вы должны выполнить соединение / фильтр за один проход. Вы можете попробовать что-то вроде этого:

Dim test = From d in _context.Documents _
           Join p in _context.Plans on d.ID Equals p.ID _
           Where predicate1(p) Or predicate2(d)
           Select d.Name, p.Name

Или аналогично:

Dim test = From d in _context.Documents _
           From p in _context.Plans _
           Where d.ID = p.ID And (predicate1(p) Or predicate2(d))
           Select d.Name, p.Name
2
ответ дан 14 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

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