IEnumerable.Where()를 사용하는 식을 수동으로 작성하여 WCF 데이터 서비스 클라이언트 측 프록시에서 DataServiceQuery를 필터링합니다. 위의 수업을 감안할 때 NotSupportedException : 상수 1 식을 문자열로 변환 할 수 없습니다.
public class EntityIdentity
{
public EntityIdentity(long id);
{
this.Id = id;
}
private long Id {get; private set;}
public override bool Equals(object obj)
{
return obj is EntityIdentity && this.Id == (obj as EntityIdentity).Id;
}
public override string ToString()
{
return this.Id.ToString();
}
}
public class Entity
{
public Entity()
{
this.Id = new EntityIdentity(0);
this.Name = null;
}
public EntityId Id { get; set; }
public string Name { get; set; }
}
, 나는 다음과 같은 경우
EntityIdentity targetId = new EntityIdentity(1)
에 해당합니다 식을 만드는 오전.
{System.NotSupportedException: Could not convert constant 1 expression to string.
at System.Data.Services.Client.ExpressionWriter.VisitConstant(ConstantExpression c)
at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.VisitOperand(Expression e, Nullable`1 parentType, Nullable`1 childDirection)
at System.Data.Services.Client.ExpressionWriter.VisitBinary(BinaryExpression b)
at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.VisitOperand(Expression e, Nullable`1 parentType, Nullable`1 childDirection)
at System.Data.Services.Client.ExpressionWriter.VisitBinary(BinaryExpression b)
at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.Visit(Expression exp)
at System.Data.Services.Client.ExpressionWriter.Translate(Expression e)
at System.Data.Services.Client.ExpressionWriter.ExpressionToString(DataServiceContext context, Expression e, Boolean inPath, Version& uriVersion)
at System.Data.Services.Client.UriWriter.ExpressionToString(Expression expression, Boolean inPath)
at System.Data.Services.Client.UriWriter.VisitQueryOptionExpression(FilterQueryOptionExpression fqoe)
at System.Data.Services.Client.UriWriter.VisitQueryOptions(ResourceExpression re)
at System.Data.Services.Client.UriWriter.VisitResourceSetExpression(ResourceSetExpression rse)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.UriWriter.Translate(DataServiceContext context, Boolean addTrailingParens, Expression e, Uri& uri, Version& version)
at System.Data.Services.Client.DataServiceQueryProvider.Translate(Expression e)
at System.Data.Services.Client.DataServiceQuery`1.Translate()
at System.Data.Services.Client.DataServiceQuery`1.QueryComponents(ClientEdmModel model)
at System.Data.Services.Client.DataServiceRequest.CreateExecuteResult(Object source, DataServiceContext context, AsyncCallback callback, Object state, String method)
at System.Data.Services.Client.DataServiceRequest.BeginExecute(Object source, DataServiceContext context, AsyncCallback callback, Object state, String method)
at System.Data.Services.Client.DataServiceQuery`1.BeginExecute(AsyncCallback callback, Object state)
at System.Data.Services.Client.DataServiceQuery`1.BeginExecuteInternal(AsyncCallback callback, Object state)
at System.Data.Services.Client.DataServiceQuery.BeginExecute(AsyncCallback callback, Object state)
at ProAlign.ServerDataModule.Services.ModelSetQueryContext.<>c__DisplayClassa.<Execute>b__3()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()}
전술 "상수 1 식의"targetId
변수의 값을 의미한다 :이 쿼리를 해결하려고하면
container.Entities.Where(e => e.Id.Equals(targetId));
는 LINQ 투 URI 변환기는 다음과 같은 예외가 발생. 이것이 의미하는 바는 무엇이며 어떻게해야합니까?
'나는 where.' 다음에 동등 물이 식을 만드는 오전 이 코드를 추가 할 수 있습니까? – nmat