[英]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);
我們在這里所做的是將集合(應該是DbSet
或IQueryable
)轉換為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.