Я запустил запрос в двух разных средах:
- Microsoft SQL Server Management Studio
- C # (.Net Core 2.2.1)
Запрос:
SELECT
CASE
WHEN afc.Id IS NULL
THEN fcv.Id
ELSE afc.ParentTemplateFieldContainerId
END AS FieldContainerId,
fcv.TemplateFieldContainerId,
CASE
WHEN fcvp.ProductId IS NULL
THEN '00000000-0000-0000-0000-000000000000'
ELSE fcvp.ProductId
END AS ProductId
FROM
FieldContainerValue fcv
LEFT JOIN
FieldContainerValueAndProduct fcvp ON fcvp.FieldContainerValueId = fcv.Id
LEFT JOIN
ArrayFieldContainer afc ON afc.ChildTemplateFieldContainer = fcv.Id
WHERE
fcv.Id IN ('337c0b2e-a83b-4014-a46a-6ce8bf9fd2c4', 'c2ca899c-28ac-4dc3-bba9-f0741bb02097')
Код, который я использовал для запуска запроса в C #:
public IEnumerable<T> QuerySql<T> (string sql)
{
using (var conn = new SqlConnection(ConfigMan.GetConfigProperty("ConnectionString")))
{
conn.Open();
conn.EnlistTransaction(Transaction.Current);
return conn.Query<T>(sql);
}
}
SQL
- это запрос.
Тип, который возвращает мой запрос:
public class FieldContainerValueProperties
{
public Guid FieldContainerValueId { get; set; }
public Guid TemplateFieldContainerId { get; set; }
public Guid ProductId { get; set; }
}
Результаты запроса: в обоих случаях я получаю одинаковое количество предметов (2), но FieldContainerId
отличается.
В SQL Server Management Studio:
[
{
"FieldContainerId": "337C0B2E-A83B-4014-A46A-6CE8BF9FD2C4",
"TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
},
{
"FieldContainerId": "C2CA899C-28AC-4DC3-BBA9-F0741BB02097",
"TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
}
]
Из C #:
[
{
"FieldContainerId": "00000000-0000-0000-0000-000000000000",
"TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
},
{
"FieldContainerId": "00000000-0000-0000-0000-000000000000",
"TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
}
]
Возможные объяснения?
Одно возможное объяснение, которое я могу себе представить, состоит в том, что в одном случае is null
вернул true
, а в другом случае false
, но я действительно не уверен.
Если это действительно так, знаете ли вы, что может вызвать эту проблему?