如何分配" var"在if语句中

时间:2017-07-12 06:01:56

标签: c# linq

我需要这样做:

var productsLocation = response.blah blah; //with linq query
var item; // even var item = null; //not valid
if(condition){
    item = productsLocation.linq query
} else {
    item = productsLocation.differentquery
}
var group = item.query;

这可能吗?如果是,怎么样?

编辑:这是我的确切代码:

var productLocation = response.productLocation.Select(p => ProductLocationStaticClass.DtoToModel(p));
var items;
if (condition)
{
    items = productLocation.Select(s => new ProductClass(s)).Where(s => categories.Contains(s.CategoryName));
} else {
    items = productLocation.Select(s => new ProductClass(s)).Where(s => categories.Contains(s.CategoryName) && stocks.Contains(s.Barcode));                        
}

3 个答案:

答案 0 :(得分:1)

如果你仔细观察逻辑,你会注意到你甚至不需要if块。整个事情可以用一个表达式写成如下:

var items = productLocation
  .Select(s => new ProductClass(s))
  .Where(s => categories.Contains(s.CategoryName) && (condition || stocks.Contains(s.Barcode)));

答案 1 :(得分:0)

您可以通过以下方式使用IEnumerable界面执行此操作:

using System.Collections;
using System.Collections.Generic;
List<string> products = new List<string>() { "First", "Second", "Third", "Fourth" };
IEnumerable item;
var condition = false;
if (condition)
{
    item = products.Select(x=>x);
}
else
{
    item = products.Where(x => x.StartsWith("F"));
}
var group =  item.Cast<string>().Where(/*...Here your conditions...*/)

答案 2 :(得分:0)

首先获取response变量类型,然后将'item'变量初始化为IEnumarable,其中T与response变量类型相同

var productsLocation = response.productLocation.Select(p => ProductLocationStaticClass.DtoToModel(p));
IEnumerable<ProductClass> item;  
if (condition)
{
    items = productLocation.Select(s => new ProductClass(s)).Where(s => categories.Contains(s.CategoryName));
} 
else 
{
    items = productLocation.Select(s => new ProductClass(s)).Where(s => categories.Contains(s.CategoryName) && stocks.Contains(s.Barcode));             
}
var group = item.Where(condition);