2015-07-14 2 views
0

У меня есть этот сценарийЭквивалент 'WHERE имя_столбца IN' синтаксис SQL в Entity Framework

public class TimeSheet 
{ 
    [Key] 
    public int TimeSheetID { get; set; } 
    public string Username { get; set; } 
} 

public class Approval 
{ 
    [Key] 
    public int ApprovalID { get; set; } 
    [Index(IsUnique = true)] 
    [StringLength(450)] 
    public string Approver { get; set; } 
    public virtual ICollection<ApprovalDetail> Details { get; set; } 
} 

public class ApprovalDetail 
{ 
    [Key] 
    public int ApprovalDetailID { get; set; } 
    [StringLength(450)] 
    public string Username { get; set; } 
} 

Я хочу следующий синтаксис в EF.

SELECT 
    * 
FROM 
    TimeSheet 
WHERE 
    UserName IN (SELECT 
        [AD].Username 
       FROM 
        Approval [A] 
       INNER JOIN 
        ApprovalDetail [AD] ON [A].ApprovalID = [AD].ApprovalID 
       WHERE 
        [A].Approver = 'warheat1990') 

Как достичь этого?

UPDATE:

Мои Репо

public IEnumerable<TimeSheet> List() 
{ 
    return _timeSheet.AsEnumerable().ToList(); 
} 

public IEnumerable<TimeSheet> ListByUsername(string username) 
{ 
    return _timeSheet.Where(w => w.Username == username).ToList(); 
} 
+0

в linq мы можем сделать как -> x.UserName.Contains(), может быть, структура сущности тоже есть – jackjop

+0

Каков ваш DBC-текст в EF? Можете ли вы также опубликовать свой код, где хотите это сделать, я предполагаю, что ваш класс «Утверждение» уже заполнен и т. Д.? –

+0

@JamieRees: проверьте обновленное сообщение – warheat1990

ответ

1

Это следует сделать это:

var usernamesByApprover = approvals 
    .Where(a => a.Approver == "warheat1990") 
    .SelectMany(a => a.Details.Select(d => d.Username)); 
var timesheetsByApprover = timesheets 
    .Where(t => usernamesByApprover.Contains(t.Username)); 

Обратите внимание, что даже если запрос разбивается на два выражения, Entity Framework преобразует его в один запрос SQL, как только вы оцениваете переменную timesheetsByApprover из-за deferred execution.

Смежные вопросы