需要說明的是,我並不是指對EF調用的結果執行.Cast<T>
。有沒有辦法在實體框架查詢的Where部分中投射?
我試圖在數字字段上實現部分搜索。
當創建一個SQL腳本,很容易一列轉換爲另一種數據類型:
SELECT Id
FROM Employees
WHERE CAST(Id AS VARCHAR) LIKE '%95%';
是否有LINQ查詢任何形式的相同呢?
我無法修改我查詢的實體上的數據類型,而Id
僅用於演示目的。
需要說明的是,我並不是指對EF調用的結果執行.Cast<T>
。有沒有辦法在實體框架查詢的Where部分中投射?
我試圖在數字字段上實現部分搜索。
當創建一個SQL腳本,很容易一列轉換爲另一種數據類型:
SELECT Id
FROM Employees
WHERE CAST(Id AS VARCHAR) LIKE '%95%';
是否有LINQ查詢任何形式的相同呢?
我無法修改我查詢的實體上的數據類型,而Id
僅用於演示目的。
我不知道爲什麼ToString不起作用,但這對我來說很有用。無需SqlFunctions:
context.Employees.Where(emp => emp.Id.ToString().Contains("95")).ToList();
是的,你說得對。我的錯。 – krillgar
您可以使用SqlFunctions.StringConvert
:
var q = db.Employees
.Where(emp => SqlFunctions.StringConvert((decimal) emp.Id).Contains("95"));
如果你不能找到一個SqlFunctions
解決方案,總有ExecuteQuery
var ids = db.ExecuteQuery<int>("SELECT Id FROM Employees WHERE CAST(Id AS VARCHAR) LIKE '%{0}%'", "95")
(這可能不是參數完全正確的。)
在大多數情況下,我會同意並接受此條款。但是,在我的特定情況下,還有一堆其他過濾和其他事情正在進行,這會使查詢過於棘手。對於在這個問題中我沒有表示道歉,但是我想讓他們專注於確切的問題。這絕對會幫助別人!謝謝。 :D – krillgar
也許[這](http://stackoverflow.com/questions/158634/doing-a-cast-within-a-linq-query)的問題可以幫助你 – LeeonTM
你可能會考慮'SqlFunctions'類。它有許多LINQ提供者直接支持的方法。我不知道它是否有'Cast'或'Convert'方法。 IIRC,它具有'StringConvert' – Amy
該SQL查詢實際上是一個錯誤。如果你必須把一個沒有商業意義的Id轉換成一個*字符串*,那麼你可以執行一個文本搜索,這是非常錯誤的。至少,您必須掃描整個表格,因爲強制轉換和通配符搜索會阻止使用索引 –