如何用变量在哪里查询LINQ并选择?

Ray*_*ink 1 c# linq

我有一个LINQ查询,如下所示:

var query = from produkt in Entity.ProduktCollection.produktCollection
            let p = produkt as Entity.Produkt

            from version in p.version
            let v = version as Entity.Version

            from customer in v.customerCollection
            let c = customer as Entity.Customer

            from fehler in v.fehlerCollection
            let f = fehler as Entity.Fehler

            where f.id == GetGuid();
            select p;
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是一种方法来使f加号属性和p变量,所以我可以将它们更改为其他所有可能的组合,例如:

where c.name == "frank"
select f;
Run Code Online (Sandbox Code Playgroud)

要么

where p.id == GetGuid2()
select c;
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?据我所知,无法在from/ let-part和where/ select-part 之间的查询中插入switch-case块.

Mar*_*zek 6

您可以在多个语句中创建查询,因为LINQ查询执行是延迟的.它适用于不同的Where陈述情况:

var querySource = from produkt in Entity.ProduktCollection.produktCollection
                  let p = produkt as Entity.Produkt
                  from version in p.version
                  let v = version as Entity.Version
                  from customer in v.customerCollection
                  let c = customer as Entity.Customer
                  from fehler in v.fehlerCollection
                  let f = fehler as Entity.Fehler
                  select new { p, v, c, f };

if(/* first condition */)
{
    querySource = querySource.Where(x => x.f.id == GetGuid());
}
else if(/* second condition */)
{
    querySource = querySource.Where(x => x.p.id = 34);
}

var query = querySource.Select(x => x.p);
Run Code Online (Sandbox Code Playgroud)

您也可以使Select部件成为条件,但由于返回的部分IEnumerable<T>不同T,您将无法将它们全部分配给同一个变量.