繁体   English   中英

Linq代码不会返回正确的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM