2013-02-22 58 views
9

Tôi muốn chọn 2 phần tử từ bảng cơ sở dữ liệu của mình sử dụng truy vấn LINQ và tôi thấy ví dụ sử dụng UNION Tôi không có nhiều kinh nghiệm nhưng tôi nghĩ rằng có thể đây là những gì tôi cần nhận được một lỗi mà tôi không thể sửa chữa và tôi không chắc chắn nếu nó có thể sửa chữa anyway. Vì vậy, đây là câu hỏi của tôi:Truy vấn LINQ UNION để chọn hai phần tử

IList<String> materialTypes = ((from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select tom.Name) 
            .Union(from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select (tom.ID))).ToList(); 

nào như nó có vẻ đang phàn nàn về cố gắng sử dụng UNION trên IQueryable với IEnumarebale. Tôi cố gắng để khắc phục điều đó bằng cách thêm ToString() như thế này - (tom.ID).ToString dẫn đến làm sạch gạch dưới lỗi trong Visual-Studio-2010 nhưng trong thời gian chạy tôi nhận được:

{"LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."} 

Ty, Leron.

+4

Tại sao bạn không chọn 'new {tom.Name, tom.ID}' thay vì sử dụng 'Union'? –

+0

Tôi muốn sử dụng dữ liệu như 'DataSource' của tôi nếu tôi thử với nó cho một lỗi mà không thể chuyển đổi từ kiểu vô danh thành chuỗi. Nếu tôi thêm' ToString() 'ngay trước' .ToList() ', tôi nhận được một chuyển đổi khác lỗi - lần này từ 'char' thành' Chuỗi' và 'Liên minh' là giải pháp mà tôi đã thấy đối với các loại tình huống này. Có cách nào khác không? – Leron

Trả lời

25

EDIT:

Ok tôi thấy lý do tại sao int.ToString() trong LINQtoEF thất bại, vui lòng đọc bài này: Problem with converting int to string in Linq to entities

này hoạt động đứng về phía tôi:

 List<string> materialTypes = (from u in result.Users 
             select u.LastName) 
         .Union(from u in result.Users 
           select SqlFunctions.StringConvert((double) u.UserId)).ToList(); 

On của bạn phải là như sau:

IList<String> materialTypes = ((from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select tom.Name) 
             .Union(from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select SqlFunctions.StringConvert((double)tom.ID))).ToList(); 

Cảm ơn , tôi đã học được điều gì đó ngày hôm nay :)

+0

Một lần nữa - 'LINQ to Entities không nhận ra phương thức 'System.String ToString()' phương pháp, và phương pháp này không thể được dịch sang một biểu thức cửa hàng.' Sai lầm từ bài gốc của tôi là một ngoại lệ bên trong. Đây là những gì tôi nhận được khi tôi cố gắng theo cách của bạn. Tôi nghĩ giống như với dấu ngoặc đơn. – Leron

+0

Lol, tôi sẽ đi ăn trưa và kiểm tra nó sau. Nếu nó hoạt động sẽ chấp nhận câu trả lời của bạn – Leron

+0

Thay đổi bài đăng của tôi vì vậy tôi nghĩ rằng nó rõ ràng hơn :) – Tom