Quantcast
Channel: ADO.NET, Entity Framework, LINQ to SQL, NHibernate
Viewing all articles
Browse latest Browse all 1698

How to concatenate string on a server side in Entity Framework core Linq query

$
0
0

I am using the newest EF core (3.1.8).

My goal is to concatenate a subquery table that returns string into one single string, I don't want SQL Server to return cloned row data by subquery rows.

I've tried this:

string.Join(", ", g.Select(x => x.stranka))


with no success.

This is my code:

            var ctx = SindikatDbContext.I;
            var q = (from p in ctx.Predmeti
                     join vrPis in ctx.Maticni_VrstaPismena on p.VrstaPismenaId equals vrPis.Id
                     join nacOdas in ctx.Maticni_NacinOdasiljanja on p.NacinOdasiljanjaId equals nacOdas.Id into tnacOdas
                     from nacOdas in tnacOdas.DefaultIfEmpty()
                     from stranka in (from s in ctx.EntitiesStranke
                                      join osoba in ctx.Maticni_Osobe on s.OsobaId equals osoba.OsobaId into tosoba
                                      from osoba in tosoba.DefaultIfEmpty()
                                      join partner in ctx.Partner on s.PartnerId equals partner.Id into topartner
                                      from partner in topartner.DefaultIfEmpty()
                                      where (int)EntityTypesEnum.pravno_Predmeti == s.EntityTypeId && s.EntityId == p.PredmetId
                                      select partner.Naziv == null ? osoba.Ime + " " + osoba.Prezime : partner.Naziv).DefaultIfEmpty()
                     group new
                     {
                         p,
                         VrstaPismena = vrPis.Naziv,
                         NacinOdasiljanja = nacOdas.Naziv,
                         stranka
                     } by new
                     {
                         p.PredmetId,
                         p.Identifikator,
                         p.PoslovniBrojPredmeta,
                         p.VrstaPismenaId,
                         p.DatumPrimitka,
                         p.DatumOdasiljanja,
                         p.NacinOdasiljanjaId,
                         VrstaPismena = vrPis.Naziv,
                         NacinOdasiljanja = nacOdas.Naziv
                     } into g
                     select
                              new { g.Key, stranka = string.Join(", ", g.Select(x => x.stranka)) });

            var rezt = q.ToList();

"stranka" is of string type.

This is the thrown exception:

System.InvalidOperationException: 'The LINQ expression '(GroupByShaperExpression:
KeySelector: new { 
    PredmetId = (p.PredmetId), 
    Identifikator = (p.Identifikator), 
    PoslovniBrojPredmeta = (p.PoslovniBrojPredmeta), 
    VrstaPismenaId = (p.VrstaPismenaId), 
    DatumPrimitka = (p.DatumPrimitka), 
    DatumOdasiljanja = (p.DatumOdasiljanja), 
    NacinOdasiljanjaId = (p.NacinOdasiljanjaId), 
    VrstaPismena = (m.Naziv), 
    NacinOdasiljanja = (m.Naziv)
 }, 
ElementSelector:new { 
    p = (EntityShaperExpression: 
        EntityType: Predmeti
        ValueBufferExpression: 
            (ProjectionBindingExpression: p)
        IsNullable: False
    ), 
    VrstaPismena = (ProjectionBindingExpression: VrstaPismena), 
    NacinOdasiljanja = (ProjectionBindingExpression: NacinOdasiljanja), 
    stranka = (ProjectionBindingExpression: stranka)
 }
)
    .Select(x => x.stranka)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.'


Viewing all articles
Browse latest Browse all 1698

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>