Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# Linq查询帮助,需要根据子查询的结果设置ID_C#_Linq - Fatal编程技术网

C# Linq查询帮助,需要根据子查询的结果设置ID

C# Linq查询帮助,需要根据子查询的结果设置ID,c#,linq,C#,Linq,我的链接查询当前看起来像: var products = ( from p in products where !p.parentID.HasValue select new ProductList { Name = p.Name, WarehouseID = p.WarehouseID, IsInStock = products.Any(p1 => p1 ... ) }

我的链接查询当前看起来像:

var products =
(
    from p in products
    where !p.parentID.HasValue          
    select new ProductList
    {
        Name = p.Name,
        WarehouseID = p.WarehouseID,
        IsInStock = products.Any(p1 => p1 ... )
    }       
).ToArray();
根据业务规则,我需要做的是:

如果
IsInStock
设置为
true
,我需要从
p1.WarehouesID
仓库ID
分配值


我怎样才能做到这一点?

您可以使用let station:

var products =
  (
   from p in products
   where !p.parentID.HasValue
   let p1Id = products.Where(p1 => p1 ... ).Select(p1 => p1.WarehouseID).FirstOrDefault()
   select new ProductList
   {
    Name = p.Name,
    WarehouseID = p1Id == 0 ? p.WarehouseID : p1Id,
    IsInStock = p1Id != 0
   }


  )
  .ToArray();

不幸的是,这并不像您希望的那么简单。尽管如此,这里还是有一种方法(假设
WarehouseID
int
):

作为解释,需要对
int?
int
进行强制转换,因为对预期
int
的结果执行
FirstOrDefault
将返回
0
,而不是
null
int?
。我在这里将其转换为
int?
,以允许我们确定结果实际上是否为
null

不要将
.ToArray()
放在末尾。 然后只需添加条件:

if (IsInStock()) 
 products = products.where(p => p.WarehouseID > 10);
else
 products = products.where(p => p.WarehouseId < 10);
if(IsInStock())
产品=产品,其中(p=>p.WarehouseID>10);
其他的
产品=产品,其中(p=>p.WarehouseId<10);
完成所有操作后,只需添加return
.ToArray()
,查询将使用ifs执行

明白了吗

if (IsInStock()) 
 products = products.where(p => p.WarehouseID > 10);
else
 products = products.where(p => p.WarehouseId < 10);