2014-09-02 52 views
-1

當我有一個問題,使用功能,這是非常奇怪的,我只是:LINQ到實體無法識別方法「System.String [] ToArray的[字符串]使用SqlQuery類方法

使用C#MVC框架4

我有一個庫類,我調用控制器內聲明此功能:

public IQueryable<Bus> Search(string[] states) 
{ 
    // Give all the buses that are inside the list of states that i giving you, no matter upper case or lower case 

    IQueryable<Bus> query = this.context.Buses; 
    if (states.Length > 0) 
    { 
     query = query.Where(b => states.Select(s => s.ToLower()).ToArray().Contains(b.State.ToLower())); 
    } 
    return query; 
} 

當我使用此功能執行動作我得到的錯誤:

LINQ to Entities does not recognize the method '**System.String[] ToArray[String]** 
... 
... 
... 

但有一種情況例外,如果我改變這樣的代碼(使用任何事情之前SqlQuery類功能):

public IQueryable<Bus> Search(string[] states) 
{ 
    // Give all the buses that are inside the list of states that i giving you, no matter upper case or lower case 

    IQueryable<Bus> query = this.context.Buses.SqlQuery("SELECT * FROM Buses").AsQueryable(); 
    if (states.Length > 0) 
    { 
     query = query.Where(b => states.Select(s => s.ToLower()).ToArray().Contains(b.State.ToLower())); 
    } 
    return query; 
} 

當我執行相同的操作是沒有問題的。有人知道爲什麼嗎?

我知道功能類SqlQuery返回DbSqlQuery對象,但在那之後我變換對象爲可查詢出於某種原因,這個對象仍然允許我使用ToArray的功能。

有沒有辦法做同樣的事情,而不使用SqlQuery函數?我試圖導入所有這些軟件包(包括在該DbSqlQuery類聲明希望有聲明的擴展,但沒有):

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Diagnostics.CodeAnalysis; 

任何幫助嗎?建議?什麼東西?

在此先感謝。

有一個愉快的一天:)

回答

0

,我發現很簡單的解決方案,我只是在之前使用ToArray的功能where語句是這樣的:

public IQueryable<Bus> Search(string[] states) 
{ 
    // Give all the buses that are inside the list of states that i giving you, no matter upper case or lower case 

    IQueryable<Bus> query = this.context.Buses; 
    if (states.Length > 0) 
    { 
     states = states.Select(s => s.ToLower()).ToArray(); 
     query = query.Where(b => states.Contains(b.State.ToLower())); 
    } 
return query; 
} 

由於斯塔對他的幫助。

1

SqlQueryIEnumerable。當你執行該操作時,數據庫就完成了。之後,你打電話給.AsQueryable(它會嘗試給你一個Queryable,但會給你一個IEnumerable,看起來像IQueryable,如果它不能)。 .ToArray發生在客戶端的內存中,而不是服務器端。

+0

謝謝,這很清楚我會尋找更好的方法來管理和上傳解決方案。 – 2014-09-03 05:23:48

相關問題