Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用变量where和select进行LINQ查询?_C#_Linq - Fatal编程技术网

C# 如何使用变量where和select进行LINQ查询?

C# 如何使用变量where和select进行LINQ查询?,c#,linq,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

我有一个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;
但我真正需要的是一种方法,使
f
加上它的属性以及
p
变量,因此我可能会将它们更改为其他任何可能的组合,例如:

where c.name == "frank"
select f;


有没有办法做到这一点?据我所知,无法在查询中的
from
/
let
-部分和
where
/
select
-部分之间插入开关大小写块。

您可以在多个语句中创建查询,因为LINQ查询执行延迟。它很好地适用于不同的
,其中
语句情况:

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);

您也可以将
Select
部分设置为有条件的,但是由于返回的
IEnumerable
部分在
T
部分中不同,因此无法将它们全部分配给同一个变量。

您可以在多个语句中创建查询,因为LINQ查询的执行是延迟的。它很好地适用于不同的
,其中
语句情况:

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);

您也可以将
Select
部分设置为有条件的,但是由于返回的
IEnumerable
部分在
T
部分中不同,您将无法将它们全部分配给同一个变量。

这太好了,我希望类似的方法可以奏效!剩下的唯一问题是:现在我的查询中有了所有不同的类型。我试着用“query=query.Where(x=>x.GetType()==T);”来指定,但是这不起作用,有没有办法让这成为可能?这太好了,我希望这样的东西可以起作用!剩下的唯一问题是:现在我的查询中有了所有不同的类型。我试图用“query=query.Where(x=>x.GetType()==T);”来指定,但这不起作用,有什么方法可以实现吗?