Linq查询不填充属性
我有一个方法内部运行LINQ查询,这是被称为内部的for循环:Linq查询不填充属性
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个用户在我的数据库,第10用户ID为1到10,所有内容都被正确检索,之后,这些ID不再被正确填充,即按顺序,检索到的用户具有以下ID: 1,2,3,4,5,6,7, 8,9,10,11,10,10,0,0
我已经在createUserWithExtrasFromLoginName中的查询中追踪了问题,最后一次检索到的对象实际上有ID 0,事实上在db中ID为15
我已经检查了dbml文件,并且确保Delay Loaded被设置为false。无论是在dbml文件还是在数据库中,userId属性都被设置为主键。
任何帮助将非常感激。
您使用LINQ查询的方法不指定返回值。从代码的外观来看,该方法应返回一个UserWithExtras对象。
你是对的,我忘了添加该行,但是,它确实返回一个UserWithExtras。 – hnafar
从你发布的内容看来,你可以用一个LINQ查询代替所有这些。更多细节可能会有所帮助。
var userIds = from u in userDb.Users
where u.Login.ToLower().Equals(login.ToLower())
select u.userId;
这假定userRepository和userDb正在访问同一商店。在这种情况下,似乎有些混乱。通过查询所有用户,然后遍历用户并在登录名上查询所有用户的userId,您将执行WAY以上的工作(请参阅笛卡尔产品)。
感谢任何试图回答这个问题的人,我昨天试着回答我自己的问题,但是*没有让我,我基本上从dbml文件中删除Users表并重新插入它,并且问题得到解决。
该方法看起来不像它甚至可以编译。在分配一个时,它会在哪里得到“u”? – Narnian
应该'.Equals(login.ToLower())'实际上是'.Equals(loginName.ToLower())'? – Eonasdan
对于你想达到的目标,你正在做很多db来回操作(或者我们错过了一些信息)。 – rtalbot