如何将List<UserTable>转为仅含邮箱的List<string>(一行代码实现)
解决方案:一行提取邮箱列表
你可以直接使用LINQ的Select操作符做投影,结合异步查询,一行代码就能完成从UserTable集合中提取邮箱并转换为List<string>的需求,无需手动循环:
public async Task<IEnumerable<string>> GetUsersAsStringBysearch(string userSearch) { // 直接通过Select投影提取Email,一步得到List<string> return await riskDBContext.UserTables .Where(e => e.Email.Contains(userSearch)) .Select(user => user.Email) // 只投影需要的Email字段 .ToListAsync(); // 启用全文索引时的替代写法 // return await riskDBContext.UserTables // .Where(x => EF.Functions.FreeText(x.Email, userSearch)) // .Select(user => user.Email) // .ToListAsync(); }
关键说明
Select(user => user.Email)会将查询结果直接转换为Email字段的序列,避免了先加载完整UserTable实体再循环提取的冗余操作- EF Core会把这个查询转换为只查询
Email列的SQL语句,相比原写法能减少数据传输量,提升性能 - 全程保持异步特性,不会阻塞线程
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

