簡體   English   中英

C#字節數組在linq中包含字符串,其中

[英]C# byte array contains string inside linq where

我需要檢查LinQ Where()方法中的字節數組是否包含字符串。 目前,我有類似的東西:

public static bool ContainsSequence(byte[] toSearch, byte[] toFind)
{
    for (var i = 0; i + toFind.Length < toSearch.Length; i++)
    {
        var allSame = true;
        for (var j = 0; j < toFind.Length; j++)
        {
            if (toSearch[i + j] != toFind[j])
            {
                allSame = false;
                break;
            }
        }

        if (allSame)
        {
            return true;
        }
    }

    return false;
}
var data = MyCollection.Where(x => ContainsSequence(x.ByteArrayValue, myStringToByteArray);

但我要例外:

LINQ to Entities無法識別方法ContainsSequence

我讀過某處可以將ContainsSequence方法重寫為Linq.Extensions.Extension地方,但我不知道如何。 有人可以指導我解決問題嗎?

EntityFramework只允許您使用LINQ方法的有限選擇,因為除非您另外明確指出,否則EF不會在內存中執行它們,而是將它們轉換為查詢並由SQL提供程序來執行。 如果要使用自己的自定義方法,則必須執行以下操作:

var data = MyCollection.AsEnumerable().Where(x => ContainsSequence(x.ByteArrayValue, myStringToByteArray);

我們在這里所做的是將集合(應該是DbSetIQueryable )轉換為IEnumerable ,我們可以在其上使用自定義方法。

但是請注意,這具有將整個集合加載到內存中的副作用。 除非您要處理大量數據,否則這不是問題,但這是要記住的事情。

您可以在此處閱讀有關AsEnumerable()更多信息,以及它的確切功能以及何時使用它。

嘗試這個:

foreach (var item in MyCollection.ToArray())
{
   var data = item.Where(x => x.ContainsSequence(x.ByteArrayValue, myStringToByteArray));
}

暫無
暫無

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

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