簡體   English   中英

從LINQ IQueryable對象返回string []?

[英]return string[] from LINQ IQueryable object?

我正在嘗試使用.NET AJAX自動完成擴展。 擴展程序期望以下...

public static string[] GetCompletionList(string prefixText, int count, string contextKey)

我的數據庫查詢在LINQ var對象中。 我收到無法將IQueryable類型轉換為string []的編譯時錯誤。

InventoryDataContext assets = new InventoryDataContext();
    var assetsInStorage = from a in assets.Assets
                          where a.Name.Contains(prefixText)
                          orderby a.Name ascending
                          select new[] { a.Manufacturer.Name, a.Name };
    return (string[])assetsInStorage;

為了首先獲得string[] ,您必須在查詢中僅選擇一個字符串屬性 ,而不是匿名對象:

var assetsInStorage = from a in assets.Assets
                      where a.Name.Contains(prefixText)
                      orderby a.Name ascending
                      select a.Manufacturer.Name; // or a.Name

assetsInStorageassetsInStorageIEnumerable<string> ,然后應通過以下方式將其轉換為string[]

return assetsInStorage.ToArray();

您的assetsInStorage似乎不是IEnumerable<string> ...,因此,您必須將匿名類型投影到字符串中。

assetsInStorage.Select(a=>a[0] + a[1]) 

(或者,但是您想要將該匿名類型轉換為字符串。)

然后您可以返回.ToArray()

return assetsInStorage.Select(a=>a[0]+a[1]).ToArray();

這應該可以解決問題:

InventoryDataContext assets = new InventoryDataContext();
var assetsInStorage = from a in assets.Assets                          
   where a.Name.Contains(prefixText)
   orderby a.Name ascending
   select String.Concat(x.ManufacturerName, " ", x.Name);    

return assetsInStorage.ToArray();

根據注釋進行編輯... EF能夠解釋String.Concat(),因此不需要其他枚舉。

如果您想要一個包含每個資產的a.Manufacturer.Namea.Name數組,則可以對CMS的答案進行一些修改:

var assetsInStorage = from a in assets.Assets
                      where a.Name.Contains(prefixText)
                      orderby a.Name ascending
                      select new[] { a.Manufacturer.Name, a.Name };

此時, assetsInStorageIEnumerable<string[]> ,它也算作IEnumerable<IEnumerable<string>> 我們可以使用SelectMany將其展平為單個IEnumerable<string> ,然后將其轉換為數組。

return assetsInStorage.SelectMany(a => a).ToArray();

這樣,您無需僅選擇一個字符串值。

嘗試:

return assetsInStorage.ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM