2

Advanced Developer Extension for MSCRM4.0のLINQtoCRMを使用しています。直接クエリで正常に機能します。しかし、クエリが次のようになると問題が発生します。

var connectionString = @"User ID=u; Password=p; Authentication Type=AD; Server=http://crm:5555/UO";
var connection = CrmConnection.Parse(connectionString);
var dataContext = new CrmDataContext(connection);

var data = from u in dataContext.Accounts
           select new 
           {  
              Id = u.AccountID,
              Name = u.AccountName,
           };

var r = from n in data
        where n.Name.StartsWith("test")
        select new 
        { 
           Id = n.Id 
        };

r.Dump();

「属性名を判別できません」というInvalidOperationExceptionがスローされます。条件が最初のクエリに直接含まれている場合は問題ありません。

var data = from n in dataContext.Accounts
           where n.AccountName.StartsWith("test")
           select new 
           {  
              Id = n.AccountID,
              Name = n.AccountName,
           };

この種のエラーに関する有用な情報は見つかりません。Xrm Linqプロバイダーのバグですか?助けてくれてありがとう。

4

1 に答える 1

1

ToList() を使用して最初のクエリを熱心にロードして、匿名型に対する後者のクエリがローカルで評価されるようにしてください。多くのアカウントを持っている場合、これは理想とはほど遠いと思いますが、それは要点を証明します. とにかく、最後のステートメントで基本的に解決策があります。

これは、最初のクエリが .Dump() を呼び出すまでまったく実行されないためです。この時点で、2 番目のクエリを含む式全体がプロバイダーによって 1 つ (遅延実行) として評価され、プロバイダーは Name の属性を検索します。

于 2011-12-08T23:08:52.680 に答える