【问题标题】:How do you convert a subquery to work with entity framework?如何将子查询转换为与实体框架一起使用?
【发布时间】:2020-04-05 00:18:51
【问题描述】:

过去我会为此创建一个视图,但我知道必须有一个“正确的方法”。

假设我有这个查询:

SELECT 
    C.CustomerID
    ,C.ClientID
    ,C.Email
    ,C.PhoneNum
    ,C.PhotoCredits
    ,C.CreateDt
    ,C.Accessed
    ,C.Name
    ,C.Notes
    ,(SELECT COUNT(*) FROM PHOTOS P WHERE P.CUSTOMERID = C.CustomerID) as "COUNT"
    ,(SELECT COUNT(*) FROM PHOTOS P WHERE P.CUSTOMERID = C.CustomerID AND PURCHASEDT is not Null) as "PURCHASED" 
FROM CUSTOMERS 

在我的控制器中,我目前有这个:

public IQueryable<Customer> GetCustomers()
{
    Guid clientID = Guid.Parse(User.Identity.GetUserId());
    return db.Customers.Where(c => c.ClientID == clientID).AsQueryable();
}

有什么我可以添加到我的模型中以包含这些计数,或者有没有办法将它们添加到控制器中以便可以在我的视图中使用它们?谢谢!

【问题讨论】:

    标签: sql-server asp.net-mvc entity-framework model-view-controller


    【解决方案1】:

    类似:

    var q = from c in db.Customers
            where c.ClientId = clientId
            select new 
            {
              c.CustomerID,
              c.ClientId,
              //. . . 
              Count = c.Photos.Count,
              PurchasedCount = c.Photos.Where( p => p.PurchaseDate != null )
            };
    

    【讨论】:

    • 哇好。您不想在“客户”中列出每一列,而是如何处理“*”?为了让 c.Photos 正常工作,我假设我的 Customer 模型中需要 public virtual ICollection&lt;Photo&gt; Photos { get; set; }
    • 我继续添加了每一列,但仍然很好奇是否有办法select *。另外,我相信 where 子句需要 2 '=' :where c.ClientID == clientID。非常感谢您的帮助!
    • 一直试图让它工作,但它告诉我它无法将我的模型转换为这种匿名类型。我如何将照片数量和购买数量添加到模型中?
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多