4
兩個表,我在這裏工作是建立這樣的:添加WHERE語句到LINQ lambda表達式
Users Table PurchaseLog Table
ID| LDAP| FNAME| LNAME| ID| UserID| PurchaseID | LOCATION |TIME
我試圖建立一個查詢,讓我回每個用戶的數量購買他們有。我想這個模型來填補:
public class UserPurchaseCount{
public string LDAP {get; set;}
public int Count {get; set;}
}
這SQL查詢我寫的似乎返回正確的結果,
Select Users.LDAP, count(*) as Purchases
FROM Users
JOIN PurchaseLog ON PurchaseLog.UserId=Users.ID
WHERE Users.FName NOT LIKE '%name%'
AND PurchaseLog.CreatedDate <= 'some end date'
AND Purchase.CreatedDate >= 'some start date'
GROUP BY Users.LDAP
我吸在lambda表達式,但我喜歡他們,並希望得到一個更好地理解他們。這是我到目前爲止:
var items = db.PurchaseLogs
.Join(db.Users, usr => usr.UserId, x => x.ID, (usr, x) => new { usr, x })
.GroupBy(y => new { y.x.LDAP})
//.Where(i => i.CreatedDate >= startDate)
//.Where(i => i.CreatedDate <= endDate)
//.Where(i => i.FName.Contains("Guy1", StringComparison.CurrentCultureIgnoreCase) == false)
.Select(g => new
{
g.Key.LDAP,
Count = g.Count()
})
.ToList();
這個lambda表達式的工作原理。當我取消註釋WHERE子句時,編譯器會拋出我的臉。
Error 6 'System.Linq.IGrouping<AnonymousType#2,AnonymousType#3>' does not contain a definition for 'FName'...
調用'的GroupBy()'之前移動它們。在羣組之後,你正在處理組對象,而不是你的項目。 –