Domanda

Vorrei creare una query con una croce applicare in una funzione di valore tabella definita dall'utente in LINQ. Lo SQL sarebbe davvero piuttosto semplice, come di seguito:

SELECT *
FROM MyTable mt
CROSS APPLY MyTVF(mt.id)

Questo alberino fornisce un esempio di una query LINQ che si traduce in SQL generato che contiene sia una croce applicano ed un'esterna diffusa, ma solo per una query sub non per un tvf. Questo conferma articolo che LINQ to SQL genererà croce applicare e applicare esterno operatori per "navigazioni di relazione", ma io non sono sicuro di quello che significa in questo contesto. Questo post descrive più o meno quello che voglio fare e la risposta dice che l'unico modo per farlo è quello di avvolgere la query SQL in una stored procedure e quindi chiamare la sp via LINQ. Spero che questo non è vero perché io in realtà bisogno di un tvf che può essere utilizzato in questo modo in tutta l'applicazione in molteplici query LINQ in modo "avvolgerla in un sp" non avrebbe funzionato per me. Qualcuno sa di un modo per ottenere qualcosa di simile alla semplice istruzione SQL sopra via LINQ?

È stato utile?

Soluzione

Che ne dite di questo:

from mt in db.MyTable
from mf in db.MyTVF (mt.id)
select new { mt.Blah, mf.Blah }

Altri suggerimenti

    var query = ActivityRepository.Where(p => p.iAction > -1 && userIds.Contains(p.iSellerId)).GroupBy(c => c.iSellerId).Select(c => c.OrderByDescending(cc => cc.dBeginTime).First()).Select(a => new ActivityInfo
        {
            ActivityId = a.iActivityId,
            StartTime = a.dBeginTime,
            SellerId = a.iSellerId,
            EndTime = a.dEndTime,
            ActivityName = a.sName,
        });

il punto chiave è: .Select (c => c.OrderByDescending (cc => cc.dBeginTime) .Prima ())

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top