Linq查询不会填充属性

时间:2011-08-29 18:17:00

标签: asp.net sql linq

我有一个在方法中运行的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属性都设置为主键。

任何帮助都会非常感激。

3 个答案:

答案 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的所有用户,您将执行比需要更多的工作(参见笛卡尔产品)。