10

Ax リポジトリから個別の文字列値を取得しようとしていますが、多くの同一の文字列を取得しています (文字列には数字のみが含まれています)。

var ret = context.XInventTransBackOrder
    .Where(i => i.BatchRouteId != "")
    .Select(i => i.BatchRouteId)
    .Distinct()
    .ToList();

どこが間違っていますか?

4

3 に答える 3

3

たとえば、BatchRouteIdが の場合XElement、おそらくオブジェクト参照の比較が実行されます。その場合、コードを次のように変更します

var ret = context.XInventTransBackOrder
    .Where(i => i.BatchRouteId != null && !String.IsNullOrEmpty(i.BatchRouteId.Value))
    .Select(i => i.BatchRouteId.Value)
    .Distinct()
    .ToList();

更新 #1

一部の型は暗黙的な変換を実装しているため、別の型であると思われることに注意してください。明示的なキャストなしでパラメータstringに a を渡すことができ、は自動的に に変換されます。XNamestringXName


更新 #2

nk2003dec のコメントによると、コンテキストはLinqToDynamicsAx. このインターフェイスはわかりませんが、おそらく実装していませんDistinct。このような場合にできることは、System.Linq.Enumerable.AsEnumerable<TSource>拡張メソッドを使用してコンテキストを XY-LINQ から Object-LINQ に変更することです。

var ret = context.XInventTransBackOrder
    .Select(i => i.BatchRouteId)
    .Where(id => id != "")
    .AsEnumerable()
    .Distinct()
    .ToList();

また、これによりアクセスが簡単になるため、反転SelectしましたWhereBatchRouteId

于 2012-11-26T14:45:35.977 に答える