你可以加入表本身(你需要一組在這裏加入):
from u in db.Users
join c in db.Users on u.UserId equals c.ParentId into children
select new
{
u.UserId,
u.Name,
ChildQuantity = children.Count()
};
或者你可以安裝在用戶類兒童的集合導航屬性。有了這個導航屬性查詢將如下所示:
from u in db.Users
select new {
u.UserId,
u.Name,
ChildQuantity = u.Children.Count()
};
我相信它有點清潔。所有你需要做的 - 增加關聯屬性兒童:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; } // Note: this property is not required
public IList<User> Children { get; set; }
}
並提供映射:
modelBuilder.Entity<User>().HasMany(u => u.Children)
.WithOptional().HasForeignKey(u => u.ParentId).WillCascadeOnDelete(false);
而生成的查詢會是這樣的:
SELECT
[Extent1].[UserId] AS [UserId],
[Extent1].[Name] AS [Name],
(SELECT
COUNT(1) AS [A1]
FROM [dbo].[Users] AS [Extent2]
WHERE [Extent1].[UserId] = [Extent2].[ParentId]) AS [C1]
FROM [dbo].[Users] AS [Extent1]
@Servey,我嘗試導航屬性的方法。但它會給出異常 - 「EntityFramework.dll中出現」System.Data.Entity.ModelConfiguration.ModelValidationException「。任何幫助? –
@ s.k.paul選項與'加入'工作沒有任何問題? –
連接工作正常。我剛剛嘗試了你建議的其他選項「協會財產」。這裏是錯誤的詳細信息 - 「 UserDetail_Children_Source_UserDetail_Children_Target::參照約束的從屬角色中的所有屬性的類型必須與主角色中的相應屬性類型相同,實體的'ParentId' UserDetail'與參考約束'UserDetail_Children'中的實體'UserDetail'上的屬性'UserId'的類型不匹配。「 –