2015-04-23 38 views
1

我想從groupby中取出最後4個元素,然後將其添加到列表中。我使用MySQL作爲數據庫和asp MVC5。我嘗試這樣做:如何在C#中使用組中的X個元素lambda

List<Payments> payments= db.Payments 
    .Where(e => e.Account.Active==true) 
    .GroupBy(e => e.IdAccount) 
    .Select(e => e.OrderBy(x => x.PaidDate).Take(4)) 
    .SelectMany(e => e).ToList(); 

我得到了以下錯誤:

Unknown column 'Join2.IdAccount' in 'where clause'

這是支付類:

public partial class Payment 
{ 
    public int Id { get; set; } 

    [ForeignKey("Account")] 
    [DisplayName("ID Account")] 
    public int IdAccount { get; set; } 

    [ForeignKey("Client")] 
    [DisplayName("ID Client")] 
    public int IdClient { get; set; } 

    public Nullable<decimal> Amount { get; set; } 

    [DisplayName("Paid date")] 
    public System.DateTime PaidDate { get; set; } 


    public virtual Account Account { get; set; } 
    public virtual Client Client { get; set; } 
} 
+1

請發佈您正在使用的付款類 – br4d

+0

我認爲這不是那麼重要,但是我加了它。 – Franchesco

回答

1

可能是,它是MySQL的提供者(SQL表達式的創造者)的錯誤。但是,你有沒有嘗試過這種方式?

List<Payments> payments = db.Payments 
    .Where(e => e.Account.Active == true) 
    .GroupBy(e => e.IdAccount) 
    .Select(e => e.OrderBy(x => x.PaidDate)) 
    .Take(4) 
    .SelectMany(e => e).ToList(); 

如果不幫你,你可以隨時通過所有查詢到這樣的代碼:

List<Payments> payments = db.Payments 
    .Where(e => e.Account.Active == true) 
    .GroupBy(e => e.IdAccount) 
    .ToList() // From here all calculations will be on web server, not in SQL. So sql query will be simlier 
    .Select(e => e.OrderBy(x => x.PaidDate)) 
    .Take(4) 
    .SelectMany(e => e).ToList(); 

但是,它會影響到更流暢。

+0

謝謝,它的工作方式,你說得對,它很慢。但是,這是與MVC和MySQL一起工作的問題。 – Franchesco

+1

MVC與此答案(或問題)完全無關。 –

+0

是的,因爲有時答案是在網絡配置或外部參考。這就是爲什麼我說我使用MVC5和MySQL。 – Franchesco

相關問題