2011-11-04 75 views
6

nói rằng tôi có 3 tên khách hàng:LINQ - Sắp xếp theo StartsWith rồi Có

Microsoft 
Another customer also called Microsoft 
A third customer called Microsoft 

Bây giờ nếu tôi truy vấn các khách hàng như thế này ...

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name ascending 
        select cust) 

... tôi nhận được lệnh này:

A third customer called Microsoft 
Another customer also called Microsoft 
Microsoft 

Điều tôi muốn là bắt đầu sử dụng Microsoft, dựa trên thực tế là Microsoft bắt đầu bằng "Microsoft".

Thay đổi Có đến StartsWith dĩ nhiên lá tôi với 1 kết quả thay vì 3.

này có thể được thực hiện trong một truy vấn duy nhất?

+0

Tôi không nghĩ như vậy, bạn hầu như cần phải sử dụng Truy vấn văn bản đầy đủ với trọng số. – Sam

+0

@Sam - Tôi đã từ chối tìm kiếm toàn văn. Nó đã cho tôi một nhức đầu khi sử dụng không gian màu trắng trong tìm kiếm. – Malako

Trả lời

14

lẽ

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name.IndexOf("Microsoft"), 
          cust.Name.Length ascending 
        select cust) 
+0

Wow nhanh quá! Thanh lịch! – Malako

+0

Đây là giải pháp rất tốt cho vấn đề của bạn. –

3

Bạn có thể đặt hàng bằng tỷ lệ phần trăm của trận đấu.

orderby "Microsoft".Length * 1.0/cust.Name.Length 

này sẽ mang lại 100% với giá chỉ Microsoft và ít nhiều cho các trận đấu khác.

+0

aMicrosoft có cùng trọng số như MicrosoftB với cách tiếp cận như vậy –

+0

Giải pháp thú vị. Cần phải thêm giảm dần mặc dù. Thumbs up! – Malako

+0

@Valentine - Đúng vậy. Tôi sẽ gắn bó với giải pháp của bạn. – Malako

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