.net 林克没有';我不能给我正确的数据

.net 林克没有';我不能给我正确的数据,.net,linq,.net,Linq,以下SQL脚本从我的数据库返回2行: SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = '111') 以下LINQ代码为我提供了一个空列表: ... private const string SQL_GE

以下SQL脚本从我的数据库返回2行:

SELECT ChaperoneID, Name 
FROM ChaperoneInfo 
WHERE ChaperoneID IN (SELECT ChaperoneID 
                      FROM ChaperoneMatches 
                      WHERE DriverID = '111')
以下LINQ代码为我提供了一个空列表:

...
private const string SQL_GET_CHAPERONES_NAME = "SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = '{0}')";
    ....
public List<ChaperoneNames> GetChaperones(string driverID)
{
    List<ChaperoneNames> diList = new List<ChaperoneNames>();
    ISafeDataContext dc = new ISafeDataContext();

    try
    {
        string strSQL = SQL_GET_CHAPERONES_NAME;
        object[] objParameters = new object[] { driverID };
        diList = dc.ExecuteQuery<ChaperoneNames>(strSQL, objParameters).ToList();
    }
    catch (Exception ex)
    {
        EventLog.WriteEntry("iSafe", ex.StackTrace + "\n \n" + ex.Message);
    }

    return diList;
}

是否在
伴侣名称
字段的名称中出现了问题?

您的ExecuteQuery命令将尝试使用sql参数,这意味着您的行

private const string SQL_GET_CHAPERONES_NAME = "SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = '{0}')";
将生成TSQL之类的产品吗

 DECLARE @p0 NVarChar(1000) = '111'
 SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN 
    (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = '@p0')"
你需要做的是删除引号,即

private const string SQL_GET_CHAPERONES_NAME = "SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = {0})";
因此,您的查询类似于

 DECLARE @p0 NVarChar(1000) = '111'
 SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN 
    (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = @p0)"

不完全确定,但我认为这是SQL\u GET\u CHAPERONES\u NAME语句中围绕参数的“”。AFAIK这是针对字符串数据类型自动完成的。您是否使用值“111”调用GetChaperones?是的,ChaperoneID是nvarchar(50),因此“111”是一个有效值。同样,作为一个简单的SQL语句,我得到了一个有效的响应。LIQ太广泛,以至于不能把它分解成“不提供正确的数据”。您的代码是否引发异常?什么是ISafeDataContext?如果使用普通数据读取器,查询是否返回任何行?这是否算作LINQ?
 DECLARE @p0 NVarChar(1000) = '111'
 SELECT ChaperoneID, Name FROM ChaperoneInfo WHERE ChaperoneID IN 
    (SELECT ChaperoneID FROM ChaperoneMatches WHERE DriverID = @p0)"