0

文字列からフィールド「1」を持つレコードのみを選択したいと思いますeventTriggers(次のようになります:「00100010」)

私は試してみましたが、1回以上の呼び出しで成功しました..しかし、その効率性は疑わしいです。基本的に私はこのようなものが欲しいです...しかしどうやらLINQはこれをサポートしていません。
( LINQ to Entities does not recognize the method 'Char get_Chars(Int32)' method, and this method cannot be translated into a store expression.)

     using (var service = new dB.Business.Service.BaseBusinessService<memo>())
   {
      List<memo> result = service.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers[index] == '1').ToList();
   }

正しい解決策へのヒントはありますか? ありがとうございました !

4

3 に答える 3

2

私は同じ問題を抱えていて、部分文字列で解決しました。

ervice.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers.Substring(index,1) == "1").ToList();
于 2015-12-05T22:22:28.387 に答える
1

EF は、char 配列操作を有効なクエリに変換できません。どうですか

IEnumerable<Memo> memos
using (var service = new dB.Business.Service.BaseBusinessService<Memo>())
{
    memos = service.Repository.GetQuery()
                    .Where(p => p.ID == ID).AsEnumerable();
}

var result = memos.Where(m => m.eventTriggers[index] == '1').ToList();

これにより、一致する ID を持つすべてのメモがローカルで取得され、eventTriggers 配列でフィルター処理されます。


別の方法として、eventTriggers を数値に変換し、ビット マスクを使用することもできます。これはおそらく、はるかに高速なクエリになります。

こんな感じのLinq、

using (var service = new dB.Business.Service.BaseBusinessService<Memo>())
{
    result = service.Repository.GetQuery()
                 .Where(p => 
                         p.ID == ID
                     &&
                         m.eventTriggers & mask != 0).ToList();
}

その他の例はこちら

于 2012-10-03T10:44:13.360 に答える
0

解決済み:

using (var service = new dB.Business.Service.BaseBusinessService<memo>())
   {
      List<memo> result = service.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers.Contains('1')).ToList();
   }
于 2018-08-30T05:44:40.183 に答える