0

LINQ を使用して、ドメイン サービス呼び出しのクエリに where 句を設定するときに問題が発生します。

where句を設定しないと問題なく動作し、完了したイベントに結果が返されます(ここで問題を示すために、完了したイベントのイベントハンドラーのみを実装しました)。

LoadOperation<User> load = 
  _Context.Load(_Context.GetUsersQuery());
load.Completed += (se, ea) => 
  MyList.ItemsSource = load.Entities.FirstOrDefault();

クエリに where 句を付けると、空のリストが得られます。そして、where句は1行を返す必要があります:)

LoadOperation<User> load = 
  _Context.Load(_Context.GetUsersQuery().Where(f => f.UserID == UserID));
load.Completed += (se, ea) => 
  MyList.ItemsSource = load.Entities.FirstOrDefault();

フィードバックをいただければ幸いです。

4

2 に答える 2

1

私の知る限り、そのような RIA サービスのクエリに where 句を入れることが可能だとは思いません。UserID を受け取り、サービスのクエリに where 句を配置するメソッドをサービスに実装する必要があります。

これは、件名に関する Brad Abram のブログ シリーズの例です。

public IQueryable<SuperEmployee> GetSuperEmployee(int employeeID)
{
    return Context.GetEmployees().ToList()
          .Where(emp => emp.EmployeeID == employeeID).AsQueryable();

}
于 2009-11-03T22:01:42.687 に答える
0

この投稿によると

RIA サービスを呼び出す場合、「in」は有効な構文ではありません。ただし、「in」が行うこととまったく同じことを行う述語式を作成することはできます。

使用法:

var ids = new[] { 10, 20,30};
var inExpression = BuiltInExpression (ids);

EntityQuery<Product> listQuery = 
  ProductContext.GetProductsQuery().Where(inExpression);

サポート コード:

static Expression<Func<Product, bool>> BuiltInExpression(int[] ids) 
{ 
 var inputExpression = Expression.Parameter(typeof(Product), "input"); 
 var valueExpression = Expression.Property(inputExpression, s_propertyInfo); 
 var inExpression = 
 ids 
 .Aggregate( 
 default(Expression), 
 (acc, v) => 
 { 
  var vExpression = Expression.Constant(v, typeof(int?)); 
  var compareExpression = Expression.Equal(valueExpression, vExpression); 
  if (acc == null) 
  { 
   return compareExpression; 
  } 
  return Expression.OrElse(acc, compareExpression); 
 }); 

 inExpression = inExpression ?? Expression.Constant(true); 
 return Expression.Lambda<Func<Product, bool>>( 
  inExpression, 
  inputExpression 
 );

 return inExpression;

}
于 2013-05-12T06:51:55.310 に答える