Linq, dwie tabele

0

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

0

obejrzyj [https://stackoverflow.com/questions/2767709/join-where-with-linq-and-lambda]

0
  1. Include
  2. Where i jako warunki podajesz x => (x.field.contains(keyword) || ...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1