简体   繁体   English

linq从基于另一个表的表中获取数据的更有效方法?

[英]linq More efficient way to get data from a table based on another table?

AlinaDatabaseDataContext db = new AlinaDatabaseDataContext();


public List<FaciliteitenLokaalFixed>
                         GetFaciliteitenVoorArchetype(ArchetypesLokaal archetype)
{
    var faciliteiten = new List<FaciliteitenLokaalFixed>();

    foreach(var faciliteit in db.FaciliteitenFixedPerArchetypes
                   .Where(f => f.Naam_archetype.Equals(archetype.Naam)))
    {
        faciliteiten.Add(db.FaciliteitenLokaalFixeds
                   .Where(f => f.Naam.Equals(faciliteit.Naam_faciliteit)).First());
    }

    return faciliteiten;
}

I have a table FaciliteitenFixed , a table ArchetypesLokaal and a table FaciliteitenFixedPerArchetype . 我有一个表FaciliteitenFixed ,一个表ArchetypesLokaal和一个表FaciliteitenFixedPerArchetype Function gets an Archetype as parameter, looks up all the names of FaciliteitenFixed in the table FaciliteitenFixedPerArchetype then gets all the FaciliteitenFixed objects and returns them in a list. 函数获取Archetype作为参数,在表FaciliteitenFixedPerArchetype查找FaciliteitenFixed所有名称,然后获取所有FaciliteitenFixed对象并在列表中返回它们。

I've used a foreach here, and this works. 我在这里使用了foreach,这可行。 But I feel like there probably is a much simpler way to do this when working with Linq. 但是我觉得与Linq合作时,可能有一种更简单的方法来执行此操作。

You can use a subselect in a LINQ query: 您可以在LINQ查询中使用子选择:

public List<FaciliteitenLokaalFixed>
                         GetFaciliteitenVoorArchetype(ArchetypesLokaal archetype)
{
    var faciliteitenQry =
        from faciliteit in db.FaciliteitenFixedPerArchetypes
        where faciliteit.Naam_archetype == archetype.Naam
        let faciliteitenLokaals =
            from f in db.FaciliteitenLokaalFixeds
            where f.Naam == faciliteit.Naam_faciliteit
            select f
        select faciliteitenLokaals.First();
    return faciliteitenQry.ToList();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM