2015-01-31 10 views
7

Tôi có hai câu lệnh chọn trong LINQ với Union.Làm thế nào để gán một thuộc tính int rỗng trong một kiểu vô danh trong LINQ với một Union?

A RoleID cần phải có giá trị null trong một trong các lựa chọn. Tôi nhận được lỗi dưới đây.

Nếu số RoleID có giá trị, nó hoạt động tốt. Báo cáo là một thực thể EF với các thuộc tính.

Nó có thể là bất cứ điều gì trong ví dụ này. Ví dụ đơn giản cho mục đích minh họa.

Mã trong LinqPad:

var list = Reports.Select(r => new 
    { 
     RoleID = 3 
    }) 
    .Union(Reports.Select(r => new 
    { 
     RoleID = new Nullable<int>() <= error 
     //RoleID = (int?) null   <= error 
     //RoleID = 4     <= works 
    })); 
list.Dump(); 

Làm thế nào để làm cho nó làm việc với một giá trị null và làm Id vai trò của kiểu int?

Thông báo lỗi:

'System.Linq.IQueryable' không chứa một định nghĩa cho 'Liên minh' và tốt nhất phương pháp mở rộng quá tải 'System.Linq.ParallelEnumerable.Union (System.Linq. ParallelQuery, System.Collections.Generic.IEnumerable) có một số đối số không hợp lệ luận Instance: không thể chuyển đổi từ 'System.Linq.IQueryable' thành 'System.Linq.ParallelQuery'

Trả lời

11

Truy vấn Select đầu tiên của bạn trả về chuỗi các đối tượng ẩn danh trong đó RoleID có loại int. Để kết hợp cả hai trình tự, chúng phải có cùng một loại đối tượng ẩn danh. Vì vậy, bạn cần phải thay đổi truy vấn đầu tiên:

var list = Reports.Select(r => new 
       { 
        RoleID = (int?)3 
       }) 

Hãy ghi nhớ, trong truy vấn thứ hai bạn cũng nên có nullable RoleID để phù hợp với loại đối tượng ẩn danh:

.Union(Reports.Select(r => new 
    { 
     RoleID = new Nullable<int>() 
     //RoleID = (int?)null 
     //RoleID = (int?)4 
    })); 

BTW Tại sao có công đoàn trên hai lựa chọn từ cùng một nguồn? Có vẻ như bạn đã đơn giản hóa các truy vấn mẫu của mình.

6

Bạn cần RoleID là nullable trong các clas ẩn danh đầu tiên s cũng như:

Reports.Select(r => new 
       { 
        RoleID = (int?)3 
       } 

Xem thêm những câu hỏi này:

+0

Bất kỳ nhận xét nào về phiếu giảm giá? OP đã chỉ ra rằng 'RoleID = 4' hoạt động cho chúng ... – Kobi

+0

Không phải là sự suy giảm của tôi, nhưng bạn không thay đổi câu trả lời? Có vẻ như ban đầu bạn đã thay đổi phần 'Liên minh' của truy vấn –

+0

Tôi cần RoleID để có giá trị trong một trong các lựa chọn.Cũng giống như trong SQL, nơi bạn có thể gán một giá trị rỗng cho một giá trị lựa chọn và trong một công đoàn khác, bạn có thể chọn một cột thực tế ở cùng một vị trí. Concat không tạo nên sự khác biệt. Nó cho cùng một lỗi. –

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