2009-12-13 7 views
0

Quelle est la méthode d'extension équivalente au LINQ suivant?C# -LINQ- Méthode d'extension

var qry = from a in context.A_Collections 
      from b in context.B_Collections 
      where a.PK == b.PK 
      select 
     new { 
       A_key = a.PK, 
       A_Value = a.Value, 
       B_Key = b.PK, 
       B_value = b.value 
      }; 

Je veux dire

(incomplète)

var query = context.A_Collections. 
       Where(
         a => a.PK == context.B_Collections.Select(b => b.PK)). 
        Select(
          x => new { 
             A_key = a.Pk, 
             A_Value = a.Value, 
             B_Key = b.PK, 
             B_value = b.value 
            } 
          ); 

Répondre

5

suite "de" clauses se traduisent par des appels SelectMany:

var qry = context.A_Collections 
       .SelectMany(a => context.B_Collections, 
          (a, b) => new { a, b }) 
       .Where(x => x.a.PK == x.b.PK) 
       .Select(x => new { A_key = x.a.PK, 
            A_value = x.a.Value, 
            B_key = x.b.PK, 
            B_value = x.b.Value }); 

Le bit "X" est due à l'introduction d'un identificateur transparent .

Notez qu'un appel à Join peut être plus efficace que l'utilisation de SelectMany (en fonction de la situation exacte), mais il s'agit de la traduction plus directe de la requête que vous avez démarrée.

0

Ce serait quelque chose comme:

context.A_Collections.Include("B") 
.Where(a => a.PK == a.B.PK) 
.Select(a => 
    new {A_key = a.PK, 
      A_Value = a.Value, 
      B_Key = a.B.PK, 
      b_value = a.B.value }); 
0

Essayez d'utiliser ReSharper cela vous aidera à convertir toutes les requêtes LINQ en Linq Méthodes si vous préférez cela.

2

Il semble que vous essayez de faire une jointure, il serait donc:

var query = context.A_Collections.Join(
context.B_Collections, 
a => a.PK, 
b => b.PK, 
(a, b) => new { 
    A_key = a.PK, 
    A_value = a.Value, 
    B_Key = b.PK, 
    B_value = b.value 
}); 

EDIT: Comme Jon Skeet souligne cependant la traduction réelle effectuée par le compilateur utilisera SelectMany bien en utilisant le groupe sera probablement plus efficace.