You can start by simplifying your SQL query - there's no need for the nested sub-queries:
SELECT
A.DISPLAY As Name,
A.TYPE As Type,
PA.DISPLAY As "Parent Asset",
CH.DISPLAY As Category,
PC.DISPLAY As "Parent Category",
T.BUSINESS_TERM As "Business Term",
T.SHORT_DESCRIPTION As Description
FROM
[Metadata].[dbo].[Asset] A
LEFT JOIN [Metadata].[dbo].[Asset] PA
ON PA.PARENT_ASSET_ID = A.ASSET_INT_ID
LEFT JOIN [METADATA].[dbo].[Category] CH
ON CH.Category_Id = A.CATEGORY_INT_ID
LEFT JOIN [METADATA].[dbo].[Category] PC
ON PC.PARENT_CATEGORY_ID = CH.CATEGORY_INT_ID
LEFT JOIN [Metadata].[dbo].[Term] T
ON T.CATEGORY_INT_ID = CH.CATEGORY_INT_ID
;
Assuming you have proper navigation properties in place in your Entity Framework models, it should be as simple as:
var result = yourDbContext.Assets
.Select(asset => new
{
Name = asset.Display,
Type = asset.Type,
Parent_Asset = asset.ParentAsset.Display,
Category = asset.Category.Display,
Parent_Category = asset.Category.ParentCategory.Display,
Business_Term = asset.Category.Term.Business_Term,
Description = asset.Category.Term.Short_Description
})
.ToList();