Ax リポジトリから個別の文字列値を取得しようとしていますが、多くの同一の文字列を取得しています (文字列には数字のみが含まれています)。
var ret = context.XInventTransBackOrder
.Where(i => i.BatchRouteId != "")
.Select(i => i.BatchRouteId)
.Distinct()
.ToList();
どこが間違っていますか?
たとえば、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 を渡すことができ、は自動的に に変換されます。XName
string
XName
更新 #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
しましたWhere
BatchRouteId