質問

従業員のリストとその役割を表示する必要がある要件があります。したがって、従業員の役割が会計である場合、その従業員の最初の名前と最後の名前を表示したいと思います。以下は私のコードです

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

会社の役割テーブルには、ユーザーテーブルの主キーIDの外部キーとしてUserIDがあります。上記の「アカウント」および「マネージャー」文字列でFirstName LastNameフィールドを取得するにはどうすればよいでしょうか。上記のコードは機能せず、両方の文字列に名前の冗長値を配置します。また、最後の名前のフィールドがあり、両方の文字列の最初の名前にそれを追加したいと思います。誰かが私がこれをどのように達成するかを説明してもらえますか?また、上記のクエリでは、Projections.Propertyを2回使用しました。

役に立ちましたか?

解決

それは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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top