Я пытаюсь получить строку из таблицы, используя платформу сущностей в C #. У меня есть таблица с именем «TipoPlanta» с первичным ключом «Tipo», который имеет тип String.
Когда я пытаюсь получить строку из таблицы, используя строку, я могу найти что-то, только если использую строковый литерал. Если я использую строку, переданную методу, я не нахожу строк.
У меня есть следующий метод, в котором есть немного добавленного материала, который я пытался отладить. Я передаю тип String tipoString, который в этом примере имеет значение «Arbol persistente». Вот код:
private TipoPlanta getTipoPlanta(String tipoString)
{
try
{
if (tipoString == "Arbol persistente")
Console.WriteLine("They are the same");
else
Console.WriteLine("They are different");
var result = (from tar in plantaContext.TipoPlanta where tar.Tipo.Contains(tipoString) select tar);
var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();
Console.WriteLine("SQL = " + sql);
Console.WriteLine("RESULT COUNT = " + result.Count());
Console.WriteLine();
var resultLiteral = (from tar in plantaContext.TipoPlanta where tar.Tipo.Contains("Arbol persistente") select tar);
var sql2 = ((System.Data.Objects.ObjectQuery)resultLiteral).ToTraceString();
Console.WriteLine("SQL2 = " + sql2);
Console.WriteLine("RESULT LITERAL COUNT = " + resultLiteral.Count());
TipoPlanta tipo = result.First<TipoPlanta>();
// TipoPlanta tipo = (from tar in plantaContext.TipoPlanta where tar.Tipo.Contains("Arbol persistente") select tar).First();
//TipoPlanta tipo = (from in plantaContext.TipoPlanta where t.Tipo.CompareTo(tipoString.Trim()) == 0 select t).First();
return tipo;
}
catch (Exception ex)
{
Console.WriteLine(ex);
log("Tipo", tipoString, "no existe.");
return null;
}
}
Вывод:
Они одинаковы
SQL = SELECT
[Extent1].[Tipo] AS [Tipo]
FROM [TipoPlanta] AS [Extent1]
WHERE (CHARINDEX(@p__linq__1, [Extent1].[Tipo])) > 0
RESULT COUNT = 0
SQL2 = SELECT
[Extent1].[Tipo] AS [Tipo]
FROM [TipoPlanta] AS [Extent1]
WHERE (CHARINDEX(N'Arbol persistente', [Extent1].[Tipo])) > 0
RESULT LITERAL COUNT = 1
Как видно, когда я использую строковый литерал, он находит строку, но не когда я использую строку, которую я передал, даже если они кажутся одинаковыми.
Есть идеи?