2017-02-08 12 views
7

Tôi có bảng nhân viên với bigint trường khóa chính trong mô hình dữ liệu cơ sở dữ liệu và thực thể với phương pháp tiếp cận cơ sở dữ liệu đầu tiên. class Employee có cấu trúc nàyChuyển đổi không cần thiết thành bigint

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

tôi viết truy vấn cơ bản này với Entity Framework

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

Nó Tạo truy vấn như sau:

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)) 

Như bạn có thể thấy có dàn diễn viên không cần thiết để bigint trong truy vấn trong khi cả hai loại Emp_Noids mảng là long, Nó gây ra thời gian thực thi xấu đặc biệt bất cứ khi nào ids mảng có nhiều yếu tố.

Tôi làm cách nào để xóa dàn diễn viên dư thừa này?

Trả lời

3

Có hầu như không có chi phí trong việc chuyển đổi cast(0 as bigint) và vì Emp_No cũng là một bigint nếu bạn không có các diễn viên có int vẫn sẽ cần phải được đề bạt lên một bigint để có thể để thực hiện việc so sánh IN để dàn diễn viên vẫn diễn ra, ngay sau hậu trường.

Chạy phiên bản truy vấn không tự mình trong phòng quản lý và nhận gói thực thi thực tế và bạn sẽ vẫn thấy chuyển đổi trong kế hoạch truy vấn.

-2

Không thực sự chắc chắn những gì bạn đang yêu cầu cho đây nhưng ..

Thay đổi dài của bạn để int và truy vấn nên làm cho bạn một int thay vì bigint.

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

Dài tương đương với bigint. Bạn có thể đọc thêm ở đây: What is the equivalent of bigint in C#?

+0

Tôi không thể làm điều này .. Tôi cần loại dài –

Các vấn đề liên quan