我有一个在方法中运行的linq查询,该方法在for循环中被调用:
var allUsers = userRepository.getAll();
foreach (var user in allUsers)
{
UserWithExtras userWithExtras = createUserWithExtrasFromLoginName(user.LoginName);
int userId = userWithExtras.userId;
}
--------------------------------------------
public static createUserWithExtrasFromLoginName(string loginName){
var user = (from u in userDb.Users
where u.Login.ToLower().Equals(login.ToLower())
select u);
int a = u.userId;
}
我的数据库中有15个用户,对于ID为1到10的前10个用户,所有内容都被正确检索,之后,ID不再正确填充,即按顺序,检索到的用户具有以下ID: 1,2,3,4,5,6,7,8,9,10,11,10,10,8,0
我在createUserWithExtrasFromLoginName中的查询中跟踪了该问题,并且最后检索到的对象实际上具有ID 0,尽管在db中ID为15。
我检查了dbml文件,并确保此属性的Delay Loaded设置为false。在dbml文件和数据库中,userId属性都设置为主键。
任何帮助都会非常感激。
答案 0 :(得分:1)
感谢任何试图回答此问题的人,我昨天尝试回答我自己的问题但是stackoverflow没有让我,我基本上从dbml文件中删除了Users表并重新插入它,问题得到解决。< / p>
答案 1 :(得分:0)
使用LINQ查询的方法未指定返回值。从代码的外观来看,该方法应返回 UserWithExtras 对象。
答案 2 :(得分:0)
根据您发布的内容,您可以使用单个LINQ查询替换所有内容。更多细节可能会有所帮助。
var userIds = from u in userDb.Users
where u.Login.ToLower().Equals(login.ToLower())
select u.userId;
这假设userRepository和userDb正在访问同一个商店。在这种情况下,似乎有些混乱。通过查询所有用户然后迭代用户并在登录名上查询userId的所有用户,您将执行比需要更多的工作(参见笛卡尔产品)。