在linq查询结果中使用foreach有问题

本文关键字:foreach 有问题 linq 查询 结果 | 更新日期: 2023-09-27 17:49:33

我的linq查询如下:

var result = (from Customer cust in db select new { userNameList = cust.UserName }).ToList();

我想循环遍历列表中的每个值<>

我尝试使用foreach来完成此操作。这是愚蠢的,我想不出来

我用的是这样的

foreach (List<string> item in result)
            {
                if (item.ToString() == userName)
                {
                    userExistsFlag = 1;
                }
            }

但是。net编译器已经崩溃了:

给了我这些错误

  1. 不能隐式转换类型"System.Collections.Generic"。列出' to 'System.Collections.Generic。列表"

  2. 无法将类型'AnonymousType#1'转换为'System.Collections.Generic.List'

谢谢你的期待

在所有这些实现中哪一个是最有效和消耗最少资源的。如果有人能帮我解释一下就太好了。

在linq查询结果中使用foreach有问题

使用Linq:

bool userExistsFlag  = result.Any( x=> x.userNameList  == userName);

正如其他答案所建议的那样,您不需要投影到匿名类型:

var userNames = (from Customer cust in db select cust.UserName).ToList();
bool userExists = userNames.Contains(userName);
编辑:

如果不需要用户名集,最有效的方法是直接查询DB以检查用户名是否存在,因此

 bool userExists = db.Any( x => x.UserName == userName);

感谢@Chris Shaffer的评论和@Cybernatet的回答-他几乎就在那里。我建议你接受他的回答,但是使用Any();-)

尝试:

var result = (from Customer cust in db select new { userNameList = cust.UserName }).ToList();
userExistsFlag = result.Where(a=> a.userNameList == userName).Count() > 0;
or
userExistsFlag = (
                    from Customer cust in db 
                    where cust.UserName = userName
                    select cust
                 ).Count() > 0;

如果您的查询返回一个名称列表,那么您的FOREACH循环应该如下所示

foreach( String name in results ){
  ...
}

跳过使用使其成为匿名实例的new { userNameList = cust.UserName }。你可以试试

var result = (from Customer cust in db select cust.UserName ).ToList();

如果您只想获得一个属性并想要一个字符串列表,那么没有理由使用匿名类型。代码应该是这样工作的:

var result = (from Customer cust in db select cust.UserName).ToList();