Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
408 views
in Technique[技术] by (71.8m points)

c# - LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method

I checked online for some answers, and I understood that I cannot translate ToInt32 to T-SQL, and I need to use run my query in-memory first and then do the conversion, but I don't know how to apply it in my example. I have the query below, and it shows me the error message written in the title:

string[] parts = rvm.ZipCode.Split('-');
var list = results.OrderBy(b => 
  Math.Abs(Convert.ToInt32(parts[0]) - Convert.ToInt32(b.Zip))).Take(5).ToList();

Where results is another query that I applied earlier. Any idea how to solve it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Calling AsEnumerable() will force it to do the ordering in memory:

var list = results.AsEnumerable().OrderBy(b => Math.Abs(Convert.ToInt32(parts[0]) - Convert.ToInt32(b.Zip))).Take(5).ToList();

This may be extremely ineficient though as the Take(5) will occur after the data has already been retrieved from the database, so you are fetching the entire result set into memory, sorting it an then discarding all but the top 5 records.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...