条件付き投影クエリを手伝ってください
-
27-10-2019 - |
質問
従業員のリストとその役割を表示する必要がある要件があります。したがって、従業員の役割が会計である場合、その従業員の最初の名前と最後の名前を表示したいと思います。以下は私のコードです
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
}
所属していません StackOverflow