1

我有一個要求,我需要顯示一個員工及其角色列表。所以如果員工的角色是會計,我想顯示該員工的名字和姓氏。以下是我的代碼有條件投影查詢幫助

SearchTemplate RoleTemplate = new SearchTemplate(); 
      RoleTemplate.Criteria = DetachedCriteria.For(typeof(CompanyRole), "CR"); 

     RoleTemplate.Criteria.CreateCriteria("User", "User") 
     .SetProjection(Projections.ProjectionList() 
      .Add((Projections.Conditional 
         (Restrictions.Eq("CR.Role", Role.Accounting), 
           Projections.Property("User.FirstName"), Projections.Property("User.FirstName"))), "Account") 
           .Add((Projections.Conditional 
         (Restrictions.Eq("CR.Role", Role.Manager), 
           Projections.Property("User.FirstName"), Projections.Property("User.FirstName"))), "Manager")); 

公司角色表具有userid作爲用戶表的主鍵ID的外鍵。如何在上面的「帳戶」和「經理」字符串中獲取名字姓氏字段。上面的代碼不起作用,它會在字符串中放入冗餘的名稱值。另外,我有一個LastName字段,我想將它附加到兩個字符串中的FirstName。任何人都可以請解釋我將如何實現這一目標?另外,在上面的查詢中我使用了兩次projection.property,我知道這是錯誤的,但我只是想知道我在找什麼。

回答

1

它必須在sql語句中嗎?難道它不夠:

var result = CreateCriteria<User>() 
    .CreateAlias("CompanyRole", "cr") 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.Property("FirstName")) 
     .Add(Projections.Property("LastName")) 
     .Add(Projections.Property("cr.Role")) 
     ) 
    .List<object[]>(); 

foreach (var item in result) 
{ 
    string name = string.Concat(item[0], item[1]); 
    Role role = (Role)item[2]; 

    // do something with name and role 
}