2014-04-02 45 views
0

我的琴絃Linq的Like運算符與固定長度(我們可以用 「_」?)

1st 110.01 
    2nd 110.01.02 
    3rd 110.02 
    4th 110.02.01 
    5th 110.03.02.03 
    6th 110.04 

目的是隻獲得最後的節點。在這個例子中,我必須拿到第二,第四,第五和第六。

所以我有一個遞歸算法。但我需要知道在LinQ中等於什麼

WHERE STR LIKE '110.__' 

我已經搜索,以避免重複的問題,但找不到。感謝您的幫助。

+1

[SqlFunctions.PatIndex](http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.patindex.aspx)? – user2864740

+1

查看http://stackoverflow.com/questions/7689284/linq-to-entities-ef-4-1-how-to-do-a-sql-like-with-a-wildcard-in-the-middle –

+2

這是LINQ到SQL,LINQ到EF,LINQ到對象還是其他東西? –

回答

1

可能性是檢查Length

string str="110."; 
.Where(i => i.StartsWith(str) && i.Lenghth == str.Length+2) 

同樣與WHERE column LIKE 110.__

+0

*「在這個例子中我必須拿第2,4,5和6」* - 這將只捕獲第一,第三和第六 – James

+0

這可以工作,但在sql中不存在與「_」相等的字符。單個字符。 – MustafaP

+0

正則表達式! –

1

使用內置功能SqlFunctions.PatIndex(模式索引),如

result = result.Where(p => SqlFunctions.PatIndex("110.__", p.Data) > 0) 
       .Reverse() 
       .Take(4); 

編輯

爲了澄清,你問什麼是拿最後的n項目,例如4.所以要做到這一點可以使用使用.Reverse().Take(4),以顛倒項目的順序,然後取第4項。如果你想要xan,然後將結果反轉回去,所以你可以在上面的代碼中添加另一個.Reverse()

+0

什麼是儲備和服用? – MustafaP

+1

@MustafaP,我更新了我的答案。 –