我有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.List'隐式转换为'System.Collections.Generic.List'
无法将'AnonymousType#1'类型转换为'System.Collections.Generic.List'
感谢您的期待
所有这些最有效并且消耗少量资源的实施方案。 如果有人可以为我确认这一点,那就足够了。
答案 0 :(得分:5)
使用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);
修改强>
效率最高 - 如果你不需要用户名组 - 就是直接查询数据库以检查用户名是否存在,所以
bool userExists = db.Any( x => x.UserName == userName);
@Jris Shaffer在评论和@Cybernatet的回答中得到了信用 - 他几乎就在那里。我建议你接受他的答案,但使用Any(); - )
答案 1 :(得分:3)
尝试:
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;
答案 2 :(得分:2)
如果您的查询返回一个名称列表,那么您的FOREACH循环应该如下所示
foreach( String name in results ){
...
}
答案 3 :(得分:1)
使用new { userNameList = cust.UserName }
跳过,这使得它成为一个匿名实例。你可以尝试
var result = (from Customer cust in db select cust.UserName ).ToList();
答案 4 :(得分:0)
如果您只是获取一个属性并且想要一个字符串列表,则没有理由使用匿名类型。代码应该像这样工作:
var result = (from Customer cust in db select cust.UserName).ToList();