gpt4 book ai didi

c# - 将 WHERE 语句添加到 LINQ lambda 表达式

转载 作者:行者123 更新时间:2023-11-30 12:21:20 24 4
gpt4 key购买 nike

我在这里使用的两个表是这样构建的:

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'...

最佳答案

在应用条件之前不要分组:

var items =db.PurchaseLogs
.Join(db.Users, usr => usr.UserId, x => x.ID, (usr, x) => new { usr, x })
.Where(i => i.user.CreatedDate >= startDate)
.Where(i => i.user.CreatedDate <= endDate)
.Where(i => !i.x.FName.Contains("Guy1"))
.GroupBy(y => new { y.x.LDAP})
.Select(g => new
{
g.Key.LDAP,
Count = g.Count()
})

.ToList();

关于c# - 将 WHERE 语句添加到 LINQ lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45723657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com