witam
opisze problem otóż mam dwie tabele Companies oraz Workers połączone jeden do wielu (w worker jest IdCompany)
iii mam za zadanie zrobić coś takiego że mam jakieś słowo klucz , lub dwie daty oznaczające przedział lub nazwe stanowiska
gdzie słowo klucz może być w nazwie Company (string name) lub w imieniu czy nazwisku Workera (string Name oraz LastName)
dwie daty oznaczające przedział oznaczają przedział daty urodzenia chociaż jednego z pracowników
nazwe stanowiska pracownika , w Worker (string PositionTitle),
To wszystko ma być to lub to lub to .
z czego żeby dobrze zrozumieć
Company ma np 3 pracowników gdzie słowo klucz pasuje do imienia jednego z nich wtedy tą company wybieramy/ po prostu u conajmniej jednego ma byc spelniony ktoryś z warunków lub warunek na slowo klucz w nazwie firmy. tylko że
mam to w sql napisane cos takiego
return _context.Companies
.FromSqlRaw(
"SELECT c.*" +
" FROM dbo.Companies c " +
" JOIN dbo.Workers w ON w.CompanyId = c.Id" +
" WHERE w.Name LIKE '%" + Keyword +
"%' OR w.LastName LIKE '%" + Keyword +
"%' OR c.Name LIKE '%" + Keyword +
"%' OR w.PositionTitle Like '%" + EmployeeJobTitles +
"%' OR (w.DateOfBirth < '" + EmployeeDateOfBirthTo.ToString("yyyy-MM-dd HH:mm:ss.fff") +
"' AND w.DateOfBirth > '" + EmployeeDateOfBirthFrom.ToString("yyyy-MM-dd HH:mm:ss.fff") + "') ")
.Include(w => w.Workers)
.ToList();
i to działa
ale mam to przerobic na Linq
w Linq do końca nie wiem jak to zrobić, wymyśliłem coś takiego że
pierwsze wybiore wszystkich Workerów gdzie spelniaja warunki i pobiore od nich CompanyId
a potem wybiore w Company te które są zbieżne z Company Id oraz te których nazwy pasują do słowa klucz. i coś takiego wyszło lecz nie potrafie zrobić żeby where (x => x.Id było porównywane do listy
var workers = _context.Workers
.Where(x => x.LastName == Keyword
|| x.Name == Keyword
|| (x.DateOfBirth > EmployeeDateOfBirthFrom && x.DateOfBirth < EmployeeDateOfBirthTo)
|| x.PositionTitle.ToString() == EmployeeJobTitles)
.Select(x => x.CompanyId)
.ToList();
return _context.Companies
.Include(w => w.Workers)
.Where(x => x.Id = workers)
.ToList();
jeszcze kombinowałem żeby to było jakby w jednym zapytaniu ale join ale
var companies = from c in _context.Companies
from w in _context.Workers
where (w.LastName == Keyword
|| w.Name == Keyword
|| (w.DateOfBirth > EmployeeDateOfBirthFrom && w.DateOfBirth < EmployeeDateOfBirthTo)
|| w.PositionTitle.ToString() == EmployeeJobTitles)
select new { c };
ale mi nie działa
i nie wiem od której stony się zabrać za to w tym sposobie po zapytaniu w sql to brakuje mi żeby przeszło przez całą liste
w tym ostatnim sposobie brakuje dużo więcej
Poszukuje pomocy lub jakiegoś dobrego artykułu jak moge to ugryźć żeby to dokończyc
z góry dzięki za pomoc