2016-09-22 8 views
1

を評価することができませんでした比較記述文字列もトリミングして上部に変換します。しかし、質問の結果、「子どもは評価できませんでした」というメッセージが表示されます。子供たちは、私は次のクエリの仕事をしようとしています

これがなぜ起こるかに関するアイデアはありますか?

+0

例外スタックトレースを送信してください。 –

+0

おそらくLinq to Entitiesは、有効なSQLでc.Description.Replace( ""、string.Empty).ToUpper()を変換できませんでした。 – Vladimir

答えて

0

クエリをデバッグする場合、次のSQL文が生成されます。

SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Description] AS [Description], 
    FROM [dbo].[ChargeMultipliers] AS [Extent1] 
    WHERE (UPPER(REPLACE([Extent1].[Description], N' ', @p__linq__0))) = (UPPER(REPLACE(@p__linq__1, N' ', @p__linq__2))) 

あなたが見ることができるように、比較はまた、SQL文でトリミングされており、String.Emptyのは多分ないパラメータとして渡すことがwoudデータベースの理解に空の文字。

私は、クエリを構築する前に、これを行うことを好むだろう:

 string descriptionTrim = description.Replace(" ", string.Empty).ToUpper(); 

     var query = from c in context.ChargeMultipliers 
        where c.Description.Replace(" ", "").ToUpper() == descriptionTrim 
        select c; 

は、生成されたSQLクエリは現在、非常に単純に見える、あなたが簡単に本当にWHERE句で比較されるかを調べることができます。

SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Description] AS [Description], 
    FROM [dbo].[ChargeMultipliers] AS [Extent1] 
    WHERE (UPPER(REPLACE([Extent1].[Description], N' ', N''))) = @p__linq__0 
+0

それは本当です。また、 'string.Empty'を' '" 'に置き換えると、いずれかのパラメータが削除されます。しかし、そのすべては、OPの質問に答えることはありません。 –

+0

私はちょうど私の答えを改善しました。 string.Emptyを ""と置き換えると、c#string.Emptyが必ずデータベースの '空'と一致する必要がないため、役立ちます。 – Patrick

+0

ポイントが改善されているかどうか、別の質問に答えていますが、OPによって尋ねられたものではなく、「子供は評価できません」という例外です*。 –

関連する問題