Aracılığıyla paylaş


from tümcesi (C# Başvurusu)

Bir sorgu ifadesinde başlaması gerekir bir from yan tümcesi.Ayrıca, bir sorgu ifadesinde de başlayan alıyorsunuz içerebilir bir from yan tümcesi.from Yan tümcesi aşağıdakileri belirler:

  • Veri kaynağı üzerinde sorgu veya sorgu çalıştırılır.

  • Yerel Aralık değişkeni temsil eden her öğesinde kaynak serisi.

Aralık değişkeni ve veri kaynağı mutlaka yazılmalıdır.Başvurulan veri kaynağı from yan tümcesi, bir tür olmalıdır IEnumerable, IEnumerable, veya türetilmiş bir tür gibi IQueryable.

Aşağıdaki örnekte, numbers veri kaynağı olan ve num aralığı değişkendir.Bu değişkenlerin kesinlikle bile ile yazılan, Not var anahtar sözcüğü kullanılır.

class LowNums
{
    static void Main()
    {   
        // A simple data source. 
        int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

        // Create the query. 
        // lowNums is an IEnumerable<int> 
        var lowNums = from num in numbers
            where num < 5
            select num;

        // Execute the query. 
        foreach (int i in lowNums)
        {
            Console.Write(i + " ");
        }
    }        
}
// Output: 4 1 3 2 0

Aralık değişkeni

Derleyici uyguladığı veri kaynağı zaman aralığı değişken türü yorumlar IEnumerable.Örneğin, kaynak türü varsa IEnumerable<Customer>, sonra da aralık değişkeni olarak algılanır Customer.Bu tip açıkça ne zaman mı belirtmesi gereken tek kaynak zamandır genel olmayan IEnumerable gibi yazın ArrayList.Daha fazla bilgi için bkz. Nasıl yapılır: LINQ ile ArrayList Sorgulama.

Önceki örnekte num türünde olayla int.Aralık değişkeni kesinlikle yazıldığı için üzerinde yöntem çağrısı ya da diğer işlemlerde kullanılacak.Yazma yerine, select num, yazabilir, select num.ToString() tamsayılar yerine dizeleri dizisi dönmek sorgu ifadesi neden olacak.Yazma veya select n + 10 sıra 14, 11, 13, 12, 10 dönmek expression'ı neden olacak.Daha fazla bilgi için bkz. select tümcesi (C# Başvurusu).

Bir yineleme değişkeni aralık değişkeni benzer bir foreach deyimi için bir çok önemli fark dışında: aralık değişkeni gerçekte hiçbir zaman kaynağından alınan verileri depolar.Bu sorgu yürütüldüğünde yalnızca ne açıklamak sorgu sağlar bir sözdizimi kolaylık ortaya çıkar.Daha fazla bilgi için bkz. LINQ Sorgularına Giriş (C#).

Bileşik yan tümceler arasında

Bazı durumlarda, her öğe kaynak sıradaki kendisi bir sıra veya olabilir bir dizi içerir.Örneğin, veri kaynağınız olabilir bir IEnumerable<Student> burada her Öğrenci nesnenin sıralı test puanlarının listesini içerir.Her iç listesine erişmek için Student öğesi, kullanabileceğiniz bileşik from yan tümceleri.Teknik kullanarak iç içe geçmiş gibi foreach deyimleri.Ekleyebileceğiniz burada veya orderby ya da yan tümcelerini from sonuçları filtrelemek için yan tümcesi.Aşağıdaki örnek, bir dizi gösterir Student her biri içeren bir iç nesne, List tamsayılar temsil eden test skorları.Bir bileşik iç listesine erişmek için kullanmak from yan tümcesi.İkisi arasındaki yan tümceleri ekleyebilirsiniz from gerekirse yan tümceleri.

class CompoundFrom
{
    // The element type of the data source. 
    public class Student
    {
        public string LastName { get; set; }
        public List<int> Scores {get; set;}
    }

    static void Main()
    {

        // Use a collection initializer to create the data source. Note that  
        // each element in the list contains an inner sequence of scores.
        List<Student> students = new List<Student>
        {
           new Student {LastName="Omelchenko", Scores= new List<int> {97, 72, 81, 60}},
           new Student {LastName="O'Donnell", Scores= new List<int> {75, 84, 91, 39}},
           new Student {LastName="Mortensen", Scores= new List<int> {88, 94, 65, 85}},
           new Student {LastName="Garcia", Scores= new List<int> {97, 89, 85, 82}},
           new Student {LastName="Beebe", Scores= new List<int> {35, 72, 91, 70}} 
        };        

        // Use a compound from to access the inner sequence within each element. 
        // Note the similarity to a nested foreach statement. 
        var scoreQuery = from student in students
                         from score in student.Scores
                            where score > 90
                            select new { Last = student.LastName, score };

        // Execute the queries.
        Console.WriteLine("scoreQuery:");
        // Rest the mouse pointer on scoreQuery in the following line to  
        // see its type. The type is IEnumerable<'a>, where 'a is an  
        // anonymous type defined as new {string Last, int score}. That is, 
        // each instance of this anonymous type has two members, a string  
        // (Last) and an int (score). 
        foreach (var student in scoreQuery)
        {
            Console.WriteLine("{0} Score: {1}", student.Last, student.score);
        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }       
}
/*
scoreQuery:
Omelchenko Score: 97
O'Donnell Score: 91
Mortensen Score: 94
Garcia Score: 97
Beebe Score: 91
*/

Birden çok yan tümceler arasında birleştirme gerçekleştirmek için kullanma

Bir bileşik from yan tümcesi iç koleksiyonları tek bir veri kaynağına erişmek için kullanılır.Ancak, birden fazla sorgu da içerebilir from bağımsız veri kaynaklarından ek sorgular oluşturmak yan tümceleri.Bu teknik, belirli türdeki kullanarak mümkün olmayan birleştirme işlemi gerçekleştirmenizi sağlar JOIN yan tümcesi.

Aşağıdaki örnekte gösterildiği nasıl iki from yan tümceleri, iki veri kaynaklarının tam çapraz birleştirme oluşturmak için kullanılabilir.

class CompoundFrom2
{
    static void Main()
    {
        char[] upperCase = { 'A', 'B', 'C' };
        char[] lowerCase = { 'x', 'y', 'z' };

        // The type of joinQuery1 is IEnumerable<'a>, where 'a 
        // indicates an anonymous type. This anonymous type has two 
        // members, upper and lower, both of type char. 
        var joinQuery1 =
            from upper in upperCase
            from lower in lowerCase
            select new { upper, lower };

        // The type of joinQuery2 is IEnumerable<'a>, where 'a 
        // indicates an anonymous type. This anonymous type has two 
        // members, upper and lower, both of type char. 
        var joinQuery2 =
            from lower in lowerCase
            where lower != 'x'
            from upper in upperCase
            select new { lower, upper };


        // Execute the queries.
        Console.WriteLine("Cross join:");
        // Rest the mouse pointer on joinQuery1 to verify its type. 
        foreach (var pair in joinQuery1)
        {
            Console.WriteLine("{0} is matched to {1}", pair.upper, pair.lower);
        }

        Console.WriteLine("Filtered non-equijoin:");
        // Rest the mouse pointer over joinQuery2 to verify its type. 
        foreach (var pair in joinQuery2)
        {
            Console.WriteLine("{0} is matched to {1}", pair.lower, pair.upper);
        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
        Cross join:
        A is matched to x
        A is matched to y
        A is matched to z
        B is matched to x
        B is matched to y
        B is matched to z
        C is matched to x
        C is matched to y
        C is matched to z
        Filtered non-equijoin:
        y is matched to A
        y is matched to B
        y is matched to C
        z is matched to A
        z is matched to B
        z is matched to C
        */

Kullanan birden çok JOIN işlemi hakkında daha fazla bilgi için from yan tümceleri, bkz: Nasıl yapılır: Özel Birleştirme İşlemleri Gerçekleştirme (C# Programlama Kılavuzu).

Ayrıca bkz.

Kavramlar

LINQ Sorgu İfadeleri (C# Programlama Kılavuzu)

Diğer Kaynaklar

Sorgu Anahtar Sözcükleri (C# Başvurusu)