【发布时间】:2020-02-21 11:17:08
【问题描述】:
我坚持拆分电子邮件以获取 LINQ 的 group by 子句中的电子邮件域,以按域对数据进行分组。 我的 LINQ 是
(
from u in DbContext.UserProfiles
join ap in DbContext.AspNetUsers
on u.PhoneNo equals ap.PhoneNumber
where u.IsVerified == true
let domainName = ap.Email.Split('@').Skip(1).FirstOrDefault()
/*ap.Email.Split('@')[1]
ap.Email.Substring(ap.Email.IndexOf('@') + 1, ap.Email.Length)
ap.Email.Split('@').ElementAt(1)
GetDomainHost(ap.Email)*/
group ap by new
{
DomainName = domainName
}
into grp
select new
{
grp.Key.DomainName,
TotalUsers = grp.Count()
};
)
注意:我也尝试过注释代码,但显示的异常与 LINQ not supported
我需要拆分电子邮件并获取将在第二个索引上的域。 我该如何解决这个问题?
编辑:
我面临转换的例外是
LINQ to Entities 无法识别方法 'System.String ElementAt[String](System.Collections.Generic.IEnumerable`1[System.String], int32)' 方法,并且这个方法不能翻译成store 表达。
其实我正在尝试转换这个SQL
select dbo.GetDomainFromEmail(ap.Email) as 'Domains', Count(*) as 'Total Users'
from AspNetUsers ap
join UserProfile up
on ap.PhoneNumber = up.PhoneNo and
up.IsVerified = 1
group by dbo.GetDomainFromEmail(ap.Email)
到LINQ。 dbo.GetDomainFromEmail(ap.Email) 是一个函数,定义为
Substring(ap.Email, Charindex('@', ap.Email)+1, LEN(ap.Email)).
【问题讨论】:
-
您应该向我们提供实际的完整错误消息,否则很难提供帮助。我猜问题出在实体框架上,它试图弄清楚如何处理您的查询。您唯一的解决方案是将数据具体化到本地的内存列表中,然后按该列表进行分组。
-
您也可以查看thread 了解如何正确拆分电子邮件
-
@PavelAnikhouski 您给定的线程仅解释了拆分字符串,但我的问题是如何在
LINQ中执行此操作。因为LINQ无法识别我所有拆分字符串的尝试。在我的问题中提供。