如何使用Linq仅选择与另一个表有关系的集合中的那些记录

时间:2015-07-25 09:21:27

标签: c# linq

您好我有两个名为SlownikRyzyk和Ryzyko的课程。我创建了一个名为query的新变量。我想插入只查询来自SlownikRyzyk的那些与类Ryzyko中的记录有关的记录。我通过使用纯linq找到了如何做到这一点的方法,但我想知道如何使用lambda表达式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqTraining
{
    class SlownikRyzyk
    {
        public int Id { get; set; }
        public string NazwaRyzyka { get; set; }

        public static List<SlownikRyzyk> getListSlownikRyzyk()
        {
            List<SlownikRyzyk> listSlownikRyzyk = new List<SlownikRyzyk>
            {
                new SlownikRyzyk
                {
                    Id=1,
                    NazwaRyzyka="Włamanie"
                },
                new SlownikRyzyk 
                {
                    Id=2,
                    NazwaRyzyka="Napad"

                },
                new SlownikRyzyk
                {
                    Id=3,
                    NazwaRyzyka="Pożar"
                },
                new SlownikRyzyk
                {
                    Id=4,
                    NazwaRyzyka="Zepsute zamki"
                }
            };

            return listSlownikRyzyk;
        }

    }
    class Ryzyko
    {
        public int Id { get; set; }
        public string Opis { get; set; }
        public int SlownikRyzykId { get; set; }
        public static List<Ryzyko> getListRyzyko()
        {
            List<Ryzyko> listRyzyko = new List<Ryzyko>
            {
                new Ryzyko
                {
                    Id=11,
                    Opis="Pożar piwnicy może grozić stratą wielu ton papieru",
                    SlownikRyzykId=3
                },
                new Ryzyko
                {
                    Id=12,
                    Opis="Ktoś może zatrzasnąć się w pokuju",
                    SlownikRyzykId=0
                },
                new Ryzyko
                {
                    Id=14,
                    Opis="Ktoś może napaść na kase",
                    SlownikRyzykId=0
                },
                new Ryzyko
                {
                    Id=17,
                    Opis="Przez włamanie do biur mogą zostać wykradzione pufne dane frimy",
                    SlownikRyzykId=1
                }
            };

            return listRyzyko;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var query = from r in Ryzyko.getListRyzyko()
                        from s in SlownikRyzyk.getListSlownikRyzyk()
                        where s.Id == r.SlownikRyzykId
                        select s;


            foreach (var a in query)
            {
                Console.WriteLine(a.NazwaRyzyka);
            }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个

var query=Ryzyko.getListRyzyko().
          Join(SlownikRyzyk.getListSlownikRyzyk(),
               r=>r.SlownikRyzykId,
               s=>s.Id,
               (r,s)=> new {R=r,S=s} )