![](/img/trans.png)
[英]Linq query doesn't return correct result if values are in different tables
[英]Linq code doesn't return correct record
我有一个名为dbo.EmployeeType
的表,有三个记录:
PK_EmployeetypeID EmployeeTypeName
1 Project Manager
2 Business Analyst
3 Developer
我有这段Linq代码:
public static string GetTypeByID(int id)
{
using (ProjectTrackingEntities1 db = new ProjectTrackingEntities1())
{
var type = db.EmployeeTypes.Select(o => new LOOKUPEmployeeType
{
PK_EmployeeTypeID = id,
EmployeeTypeName = o.EmployeeTypeName
});
return type.FirstOrDefault().EmployeeTypeName;
}
}
无论我发送给它的是什么ID,它都会返回Project Manager
,我很困惑为什么。
您需要应用过滤器,否则您只需返回第一条记录并对ID进行硬编码。 尝试这个:
public static string GetTypeByID(int id)
{
using (ProjectTrackingEntities1 db = new ProjectTrackingEntities1())
{
//Here we apply a filter, the lambda here is what creates the WHERE clause
var type = db.EmployeeTypes
.FirstOrDefault(et => et.PK_EmployeeTypeID == id);
if(type != null)
{
return type.EmployeeTypeName;
}
else
{
return "";
}
}
}
请注意,使用FirstOrDefault
意味着如果没有匹配项或多个匹配项,则type
将为null
并且您将返回一个空字符串。
在type = ...
上设置断点并检查它。 你没有Where
在那里所以你得到了所有 - 而Select
只是从所有这些中LOOKUPEmployeeTypes
。
然后, FirstOrDefault
返回那些始终是ProjManager的第一个
固定:
var type = db
.EmployeeTypes
.Where( o => o.Id == id)
.Select(o => new LOOKUPEmployeeType
{
PK_EmployeeTypeID = id,
EmployeeTypeName = o.EmployeeTypeName
});
在您的代码中,您只返回第一个值。 您需要告诉EF您需要返回哪个值。
我们假设您需要Id = 2的值。 而不是Select()
,使用Single(x => x.Id == 2)
或First(x => x.Id == 2)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.