2009-08-04 36 views
48

làm cách nào để truyền và nhập vào chuỗi? Không ai trong số các tác phẩm sau đây:Linq int vào chuỗi

from s in ctx.Services 
    where s.Code.ToString().StartsWith("1") 
    select s 

from s in ctx.Services 
    where Convert.ToString(s.Code).StartsWith("1") 
    select s 

from s in ctx.Services 
    where ((string)s.Code).ToString().StartsWith("1") 
    select s 

EDIT

Các lỗi tôi nhận được là:

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

+0

Hai người đầu tiên phải làm việc ... bạn có thể giải thích về những gì "Không có công việc nào sau đây ..." có nghĩa là? –

+0

Bạn không nhận được bất kỳ kết quả nào? Bạn đã xác nhận rằng cột "Mã" có chứa giá trị bắt đầu bằng "1" không? – Keith

+1

www.linqpad.net rất hữu ích cho việc học LINQ (và khá nhiều thứ khác trong .NET). Đó là miễn phí và rất khuyến khích. Ngoài ra, $ 19 Intellisense của nó là rất tốt. –

Trả lời

33

LINQ to Entities không hỗ trợ nhiều chuyển đổi chức năng cho máy chủ lưu trữ sql.

ToString (trên bất cứ điều gì) là một trong số họ

Dưới đây là danh sách các supported functions

này đã được hỏi trước trên Stack tràn đặc biệt asking how to convert an int to a string

+8

Liên kết đầu tiên của bạn đã chết. –

-1

Dưới đây là một cách để làm điều đó.

int[] x = new int[] {11,3,15,7,19}; 

var j = from s in x where s.ToString().StartsWith("1") select s.ToString(); 

Console.WriteLine(j); 
+7

điều này không giúp anh ta - anh ta đang sử dụng LINQ to entity – ShuggyCoUk

2

Tôi đã có một vấn đề tương tự

 IQueryable<Street> query = db.Streets.AsQueryable(); 
     query = query.Where(street => street.Name.ToLower().StartsWith(keyword)) 
         .Take(10) 
         .OrderBy(street => street.Name); 

     var list = query.Select(street => new 
     { 
      street.StreetId, 
      Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode 

     }); 

street.Suburb.Postcode đã được ném 'không thể chuyển đổi lỗi loại nguyên thủy' như là một int của nó? Sau khi theo dõi liên kết shuggy của tôi cố định bằng cách thêm .AsEnumerable để buộc int? -> chuyển đổi chuỗi 'phía máy khách' tức là LINQ thành Đối tượng. tức là

var list = query.AsEnumerable().Select(street => new 
     { 
      street.StreetId, 
      Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode 

     }); 
+0

Cảm ơn bạn, bạn chắc chắn đã cứu ngày của tôi. Thêm 'AsEnumerable' là chìa khóa ở đây. –

+0

Liệu AsEnumerable() có làm cho toàn bộ bảng cơ sở dữ liệu được nạp vào bộ nhớ? – Dwayne

55

Với EF v4 bạn có thể sử dụng SqlFunctions.StringConvert. Vì vậy, mã của bạn sẽ kết thúc như thế này:

from s in ctx.Services 
where SqlFunctions.StringConvert((double)s.Code).StartsWith("1") 
select s 

EDIT

Như Rick đề cập trong bình luận của ông, lý do cho đúc các int cú đúp (thập phân có thể hoạt động quá) là các chức năng thực hiện không có quá tải cho int.

+10

Điều này phù hợp với tôi! Điều buồn cười duy nhất về điều này là dường như không có quá tải của chức năng này cho 'int'. Đó là lý do tại sao Brian là boxing này như là một đôi trước khi gọi chức năng ở trên. Theo ý kiến ​​của tôi, điều này cần phải được đánh dấu là câu trả lời cho câu hỏi này. –

+0

Điều này cũng đã làm việc cho tôi. Tôi đồng ý với Rick Arthur rằng đây sẽ là câu trả lời. – Alban

+2

câu trả lời này bây giờ hữu ích hơn tôi, nếu op muốn thay đổi câu trả lời được chấp nhận sẽ tốt, nếu không tôi sẽ thêm ghi chú để chỉ ra rằng, từ v4 bạn nên sử dụng câu trả lời của mình. – ShuggyCoUk

1

truyền IQueryable thành IEnumerable vì IQueryable kế thừa IEnumerable. xem http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx - cụ thể: 'Liệt kê khiến cây biểu thức được liên kết với một đối tượng IQueryable được thực thi.' Tôi nghĩ điều quan trọng là 'Định nghĩa về' thực thi một cây biểu thức "là cụ thể cho một nhà cung cấp truy vấn '.

IQueryable rất mạnh mẽ nhưng bị lạm dụng trong ngữ cảnh này.

+0

Điều này đã làm việc cho tôi quá, cảm ơn bạn rất nhiều. – jmaragon

+0

Điều này được đề xuất trong [câu hỏi tương tự này] (http://stackoverflow.com/questions/1765423/problem-getting-guid-string-value-in-linq-to-entity-query). Điều tốt đẹp về cách tiếp cận này là nó hoạt động cho dữ liệu phi số, chẳng hạn như Guids. –

1

tôi đã cố gắng workaround này và nó làm việc cho tôi:

from s in ctx.Services 
where (s.Code + "").StartsWith("1") 
select s 

Hope this helps

2

Khi sử dụng LINQ to Objects bạn có thể sử dụng ToString() helper.

-1
from s in ctx.Services.ToList() 
    where s.Code.ToString().StartsWith("1") 
    select s 
-1
var items = from c in contacts 
select new ListItem 
{ 
    Value = String.Concat(c.ContactId), //This Works in Linq to Entities! 
    Text = c.Name 
}; 

tôi thấy rằng SqlFunctions.StringConvert ((double) c.Tuổi tác) không hoạt động đối với tôi hoặc trường là loại Nullable

Đã cho tôi rất nhiều tìm kiếm trong vài ngày thử nghiệm và lỗi gần đây nhất để tìm ra điều này.

Tôi hy vọng điều này sẽ giúp một vài lập trình viên ở đó.

+1

Tôi đang cố gắng chọn SelectListItems và truyền một ID int vào thuộc tính chuỗi "Giá trị", giống như ví dụ của bạn. Nhưng với mã này tôi nhận được 'LINQ to Entities không nhận ra phương thức 'System.String Concat (System.Object)' 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. –