У меня есть существующий запрос LINQ, для которого требуется два правильных объединения, я знаю, как я буду писать его в SQL, но я не уверен в LINQ.Как преобразовать этот запрос SQL в Linq
Это не вопрос о том, как сделать одно соединение в linq. Мне нужны эти два.
рассмотрим следующий псевдо SQL-запрос:
SELECT [ProjectItem].*
FROM [ProjectItem]
RIGHT JOIN [UserCostingItem]
ON [UserCostingItem].[CostingItemID]
= [ProjectItem].[ProjectItemID]
RIGHT JOIN [UserCostingItemType]
ON [UserCostingItemType].[CostingItemType]
= [ProjectItem].[ProjectItemType]
WHERE
(
[UserCostingItem].[PrimaryKey] IS NOT NULL
OR
[UserCostingItemType].[PrimaryKey] IS NOT NULL
)
Я хочу, чтобы получить записи в таблице Пункт проекта, где есть запись либо в UserCostingItem
таблицы или UserCostingItemType
таблицы.
В настоящее время я присоединяюсь к одной таблице, но мне нужно право присоединиться к обоим и возвращать только записи, которые существуют в одном из объединений.
вот код, который я до сих пор что только внутреннее присоединение на одном столе:
List<PCProjectItem> projectItems = new List<PCProjectItem>();
List<UserCostingItem> userCostingItems = new List<UserCostingItem>();
List<UserCostingItemType> userCostingItemTypes = new List<UserCostingItemType>();
projectItems = PCProjectItem.GetProjectItems(projectID, sageDatabaseID, PCIntegrationOption);
userCostingItems = UserCostingItem.GetUserCostingItems(userID, sageDatabaseID, documentType == null ? string.Empty : documentType.Value.ToString());
userCostingItemTypes = UserCostingItemType.GetUserCostingItemTypes(userID, sageDatabaseID);
//If there are no project items or allocations, return a new list now
if (projectItems.Count == 0 || (userCostingItems.Count == 0 && userCostingItemTypes.Count == 0))
{
return new List<PCProjectItem>();
}
//Get the project Items the user has access to only
return (from PCProjectItem projectItem in projectItems
join UserCostingItem userCostingItem in userCostingItems on projectItem.PCCostItemID equals userCostingItem.CostingItemID
select projectItem)
.Distinct() // Distinct Records
.ToList(); // Convert to list
возможно дубликат [LINQ слева Join and Right Join] (http://stackoverflow.com/questions/4497086/linq-left-join-and-right-join) – user1666620
Не дублируется связанный вопрос. Вопрос в том, как мне сделать два правильных соединения и выбрать запись, относящуюся к любому из них, а не как сделать левое/правое соединение. – WraithNath
Прежде всего - LINQ к чему? EF, SQL, Objects? В любом случае, если вы определяете правильные отношения между вашими сущностями и сопоставлениями с базовыми таблицами, вам не нужно создавать какие-либо объединения. Использование соединений вместо отношений - сильный запах, который предполагает, что объектная модель неверна или что LINQ и ORM используются так, как если бы они были обычными ADO.NET. –