i am intend to convert the following query into linQ
SELECT TOP 100 S.TxID, 
    ToEmail, 
    [Subject], 
    ProcessedDate,
    [Status] = (CASE WHEN EXISTS (SELECT TxID FROM TxBounceTracking
                            WHERE TxID = S.TxID)
                THEN 'Bounced'
                WHEN EXISTS (SELECT TxID FROM TxOpenTracking
                            WHERE TxID = S.TxID)
                THEN 'Opened'
                ELSE 'Sent' END)
FROM TxSubmissions S
WHERE S.UserID = @UserID 
AND ProcessedDate BETWEEN @StartDate AND @EndDate
ORDER BY ProcessedDate DESC
The following code is the linq that i converted.
v = (from a in dc.TxSubmissions
where a.ProcessedDate >= datefrom && a.ProcessedDate <= dateto && a.UserID == userId
let bounce = (from up in dc.TxBounceTrackings where up.TxID == a.TxID select up)
let track = (from up in dc.TxOpenTrackings where up.TxID == a.TxID select up)
select new { a.TxID, a.ToEmail, a.Subject, 
    Status = bounce.Count() > 0 ? "Bounced" : track.Count() > 0 ? "Opened" : "Sent", 
    a.ProcessedDate });
However this linq is too slow because the bounce and track table, how should i change the linq query to select one row only to match the SQL query above >>
SELECT TxID FROM TxOpenTracking WHERE TxID = S.TxID 
in my selected column, so it can execute faster.
Note that the record contained one million records, thats why it lag
 
     
     
    