1

従業員とその役割のリストを表示する必要があるという要件があります。したがって、従業員の役割が会計である場合、その従業員の FirstName と LastName を表示したいと考えています。以下は私のコードです

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"));

会社のロール テーブルには、User テーブルの主キー id に対する外部キーとして userid があります。上記の「アカウント」および「マネージャー」の文字列で姓名フィールドを取得するにはどうすればよいですか。上記のコードは機能せず、両方の文字列に冗長な名前の値を入れます。また、LastName フィールドがあり、それを両方の文字列の FirstName に追加したいと考えています。どうすればこれを達成できるのか、誰か説明してもらえますか? また、上記のクエリでは、projections.property を 2 回使用しましたが、これが間違っていることはわかっていますが、探しているもののアイデアを提供したかっただけです。

4

1 に答える 1

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
}
于 2011-06-20T16:19:38.213 に答える