andrewlock / StronglyTypedId

A Rosyln-powered generator for strongly-typed IDs
MIT License
1.5k stars 78 forks source link

How to use string functions like `Contains` or `StartWith` with string backed StronglyTypedId for Like queries in ef core #128

Open amit-srivastava-007 opened 5 months ago

amit-srivastava-007 commented 5 months ago

Hello, I'm having a situation where a StronglyTypedIdBackingType.String ids need to be used in a ef core query with StartsWith. Currently, I'm not seeing any string function available for such ids. Please guide me how to use it.

I'm using v1.0.0-beta06 of the package

Example:

let's say abc/efg/mnpxyz is a value of an Id field stored as hierarchy for city/ward/building for Office entity.

public class Office
{
  [StronglyTypedId(backingType: StronglyTypedIdBackingType.String)]
  public partial struct Id { }
}

I want to write query

Office.Where(x=>x.Id.StartsWith("abc").Select(x=>x);
andrewlock commented 5 months ago

Unfortunately, I think the short answer is that you can't currently. I'm not aware of a mechanism in EF Core to allow this currently. I'm certainly interested if someone can show how to make it work, but the IDs generally are intended to be opaque IDs.

loop8ack commented 2 weeks ago

You could take a look at this: https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping#mapping-a-method-to-a-custom-sql

I used it once to make an important business calculation available in EFCore queries, it was easier than I expected.