C# 如何使用变量where和select进行LINQ查询?
我有一个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
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);”来指定,但这不起作用,有什么方法可以实现吗?