2017-02-08 13 views
7

У меня есть таблица сотрудников с bigint поле первичного ключа в базе данных и модели данных сущности с первым подходом базы данных. Класс Employee имеет такую ​​структуруНенужное преобразование в bigint

public partial class Employee 
{ 
    public long Emp_No { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    ... 
} 

я пишу этот базовый запрос с Entity Framework

List<long> ids = new List<long>() {1,2,3,4,5,6} 
database.Employees.Where(q => ids.Contain(q.Emp_No)).ToList(); 

Он Сформировать запрос в следующем виде:

SELECT 
    [Extent1].[Emp_No] AS [Emp_No], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[Family] AS [Family], 
    ... 
    FROM [dbo].[Employee] AS [Extent1] 
    WHERE [Extent1].[Emp_No] IN (cast(0 as bigint), 
           cast(1 as bigint), 
           cast(2 as bigint), 
           cast(3 as bigint), 
           cast(4 as bigint), 
           cast(5 as bigint), 
           cast(6 as bigint)) 

Как вы можете видеть, что есть ненужное приведение к bigint в запросе, в то время как оба типа массива Emp_No и ids: long, он вызывает плохие времена выполнения, когда ids массив имеет много элементов.

Как удалить эту резервную копию?

ответ

3

Там практически нет затрат на преобразование cast(0 as bigint) и потому, что Emp_No также bigint, если у вас не было бросание там ИНТ по-прежнему должны были бы быть повышен до BIGINT, чтобы быть в состоянии чтобы сделать сравнение IN, так что актер все равно случится, просто за кулисами.

Запустите немедленную версию запроса самостоятельно в студии управления и получите фактический план выполнения, и вы все равно увидите преобразование в плане запроса.

-2

Не совсем уверен, что вы просите здесь, но ..

Меняйте долго Int и запрос должен сделать вам Int вместо BIGINT.

public partial class Employee 
{ 
    public int Emp_No { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    .... 
} 

Длинный эквивалент bigint. Вы можете прочитать здесь: What is the equivalent of bigint in C#?

+0

Я не могу этого сделать .. Мне нужен длинный тип –