I am trying to convert an old T-SQL query to LINQ. The old query is similar to:
Person
(
personId bigint,
username varchar(18)
)
Phones
(
phoneId bigint,
personId bigint, [FK to Persons.personId]
phoneNumber varchar(30),
phoneType varchar(1) [could be any of" "O", "H", 'Y" or a few others]
)
SELECT
person.personId,
person.username,
phone.phoneNumber
FROM
Persons persons
LEFT JOIN
Phones phones ON person.personId = phones.personId
AND phones.phoneType IN ("O", "Y")
WHERE
person.username != ""
AND person.ActualEndDate IS NOT NULL
How do I implement the AND phones.phoneType in ("O", "Y")
clause in linq? I can do one at a time as in:
netids = (
from person in Persons
join phone in Phones
on new {
person.PersonId,
phoneTypeAbbv = "Y"
} equals new {
phone.PersonId,
phoneTypeAbbv = phone.PhoneTypeAbbv.ToUpper()
} into phoneList
from phoneListItem in phoneList.DefaultIfEmpty()
where !person.username.Equals("")
& !person.ActualEndDate.HasValue
select new NetidToLync {
PersonId = person.PersonId,
Netid = person.username.Trim().ToLower(),
Lync = phoneListItem.PhoneNumber.Trim().ToLower() ?? ""
}
).ToList();