1

次のクエリで

  var restrictions = from p in dcTrad.quop_restricted_items
                           where p.entry_status == 'P' && p.batch == "PRODUCTION" && p.problem != null
                           from q in dcTrad.model_companies
                           where   q.co_name != null && p.brimsec == q.primary_bsec                            
                           select new { Company = q.co_name, Restriction = p.comment ?? "Restricted without comments", Portfolio = p.problem };

交換する必要があります

p.brimsec == q.primary_bsec 

p.brimsec.StartsWith ( q.primary_bsec  )

しかし、次のエラーが発生します。

Only arguments that can be evaluated on the client are supported for the String.StartsWith method

どうすればこれを機能させることができますか?

4

3 に答える 3

1

残念ながら、LINQからSQLへのトランスレータは、このコードを変換するほど賢くはありませんが、同じことを実現するトリックがあります。

p.brimsec.StartsWith ( q.primary_bsec  )

翻訳:

p.brimsec.SubString(0, q.primary_bsec.Length) == q.primary_bsec

LINQ to SQLトランスレータはこれを適切に処理し、セマンティクスはStartsWithと同等です。

率直に言って、サーバー側の引数に対してStartsWithを適切に変換することが非常に困難であったため、LINQ開発者が代わりにエラーをスローすることにした理由がわかりません。

于 2010-12-13T19:54:12.867 に答える
0

あなたが直面している問題は、linq-to-sqlにString.StartsWithのSQLへの変換がないことだと思います。ただし、String.Containsは機能します。結果のコレクションを調べて、q.primary_bsecで始まらないアイテムを除外する必要があります。

于 2010-11-19T23:32:52.733 に答える
0

基本的に、linqからsqlは、startswithをSqlに変換する方法を知りません。これは、実行時に内部的にlinqがsqlに対して生成されたコードであるためです。

これを実現するには、UDF(SQLのユーザー定義関数)を作成し、linqステートメントから使用します。

記事は次のとおりです:http: //msdn.microsoft.com/en-us/library/bb399416.aspx

アンドリュー

于 2010-11-19T23:36:19.703 に答える