在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编译器已经崩溃了:
给了我这些错误
不能隐式转换类型"System.Collections.Generic"。列出' to 'System.Collections.Generic。列表"
无法将类型'AnonymousType#1'转换为'System.Collections.Generic.List'
谢谢你的期待
在所有这些实现中哪一个是最有效和消耗最少资源的。如果有人能帮我解释一下就太好了。
使用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();