2012-06-25 17 views
5

Tên và loại cột giống hệt nhau, tuy nhiên nó đến từ hai thực thể riêng biệt. Dưới đây là một ví dụ đơn giản:Nối hai biến IQueryable với nhau bằng cách sử dụng LINQ

--Query View 
var v_res = from s in db.V_CMUCUSTOMER 
      select s; 

--Values from table less values from view 
var res = from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
     select s; 

--join table and view values into one variable 
var res_v_res = (from c in res 
      select c).Union(from v in v_res 
      select v); 

tôi nhận được lỗi sau tuy nhiên:

luận Instance: không thể chuyển đổi từ 'System.Linq.IQueryable' để System.Linq.ParallelQuery

+2

Tôi đặt cược nếu bạn đã ngừng sử dụng 'var', câu trả lời sẽ rõ ràng. Bằng cách cho phép trình biên dịch chọn loại v_res và res, bạn có thể sống với các lựa chọn của nó. –

+1

hãy xây dựng. – stats101

+0

Trình biên dịch có thể chọn loại không mong muốn cho một trong các biến đó, sau đó nó có thể chọn giữa các triển khai khác nhau của Liên minh dựa trên lựa chọn đó (System.Linq.Enumerable.Union, System.Linq.Queryable.Union để đặt tên cho hai khả năng) . Thay vào đó, nếu bạn chỉ định kiểu, trình biên dịch sẽ cho bạn biết khi bạn yêu cầu điều không thể. –

Trả lời

0

Nếu bạn chỉ định một loại vô danh mới và sử dụng ToList() cho cả hai sau đó bạn sẽ có thể để Liên minh họ như sau:

var v_res = (from s in db.V_CMUCUSTOMER 
      select new { custName = s.customer_name custAddress = s.address}).ToList(); 

--Values from table less values from view 
var res = (from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
      select new { custName = s.customer_name custAddress = s.address }).ToList(); 

--join table and view values into one variable 
var res_v_res = v_res.Union(res); 

Đây có thể là lựa chọn hợp lý nếu có hàng chục cột nhưng nên vẫn làm việc .

0

Khi tôi chạy một truy vấn tương tự trong LINQPad, tôi nhận được một thông báo lỗi tuyên bố rằng s trong Contains(s.ID) không được định nghĩa trong ngữ cảnh này.

Nếu tôi thay thế && bằng where tất cả các truy vấn được thực thi thành công.

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