C# 结果与空LINQ查询的并集

C# 结果与空LINQ查询的并集,c#,linq,iqueryable,C#,Linq,Iqueryable,在数据库中,我有一些产品和价格。 我需要搜索价格限制。问题是可能有几个限制。例如,0-500美元1500-2000美元 如何合并此LINQ查询 var products = from product in db.Products where product.Price >= 0 and product.Price <= 500 var products = from product in db.Products where product.Price >= 1500 and

在数据库中,我有一些产品和价格。 我需要搜索价格限制。问题是可能有几个限制。例如,0-500美元1500-2000美元

如何合并此LINQ查询

var products = from product in db.Products
where product.Price >= 0 and product.Price <= 500

var products = from product in db.Products
where product.Price >= 1500 and product.Price <= 2000
var products=来自数据库产品中的产品

当product.Price>=0,product.Price=1500,product.Price=start&&product.DiscountPrice时,可以使用
Enumerable.empty().AsQueryable()
创建空查询

代码中存在一个问题:
Union
不会改变作为参数传递给它的任何序列;相反,它创建了一个新的序列并返回。因此,您应该将
tempResults.Union(allResults)
操作的结果分配给
allResults

以下是一些示例代码(未测试):

IQueryable filteredResults=Enumerable.Empty().AsQueryable();
对于(int i=0;i其中product.DiscountPrice>=start&&product.DiscountPrice您可以使用
Enumerable.empty().AsQueryable()
创建一个空查询

代码中存在一个问题:
Union
不会改变作为参数传递给它的任何序列;相反,它会创建一个新序列并返回。因此,您应该将
tempResults.Union(allResults)
操作的结果分配给
allResults

以下是一些示例代码(未测试):

IQueryable filteredResults=Enumerable.Empty().AsQueryable();
对于(int i=0;i其中product.DiscountPrice>=start&&product.DiscountPrice一种方法是合并条件:

var products = from product in db.Products
where (product.Price >= 0 and product.Price <= 500)||product.Price >= 1500 and product.Price <= 2000
在上调整代码可以做到:

IQueryable<Deal> allResults = null;
for(var i = 0; i < price.Length - 1; i = i + 2)
{
    decimal start,end;
    decimal.TryParse(price[i], out start);
    decimal.TryParse(price[i+1], out end);

    var tempResults = from product in db.Products
                      where (product.DiscountPrice >= start && product.DiscountPrice <= end)
                      select product;
    if(allResults!=null)
       allResults=allResults.Union(tempResults);
    else
       allResults=tempResults;
}
IQueryable allResults=null;
对于(变量i=0;i其中(product.DiscountPrice>=start&&product.DiscountPrice一种方法是合并条件:

var products = from product in db.Products
where (product.Price >= 0 and product.Price <= 500)||product.Price >= 1500 and product.Price <= 2000
在上调整代码可以做到:

IQueryable<Deal> allResults = null;
for(var i = 0; i < price.Length - 1; i = i + 2)
{
    decimal start,end;
    decimal.TryParse(price[i], out start);
    decimal.TryParse(price[i+1], out end);

    var tempResults = from product in db.Products
                      where (product.DiscountPrice >= start && product.DiscountPrice <= end)
                      select product;
    if(allResults!=null)
       allResults=allResults.Union(tempResults);
    else
       allResults=tempResults;
}
IQueryable allResults=null;
对于(变量i=0;i其中(product.DiscountPrice>=start&&product.DiscountPrice您想要联合还是加入?它们是两个不同的函数。您想要联合还是加入?它们是两个不同的函数。
IQueryable<Deal> allResults = null;
for(var i = 0; i < price.Length - 1; i = i + 2)
{
    decimal start,end;
    decimal.TryParse(price[i], out start);
    decimal.TryParse(price[i+1], out end);

    var tempResults = from product in db.Products
                      where (product.DiscountPrice >= start && product.DiscountPrice <= end)
                      select product;
    if(allResults!=null)
       allResults=allResults.Union(tempResults);
    else
       allResults=tempResults;
}
IEnumerable<Tuple<Decimal,Decimal>> ParsePrices(string[] rawPrices)
{
    for(var i = 0; i < price.Length - 1; i = i + 2)
    {
       decimal start=decimal.Parse(price[i]);
       decimal end  =decimal.Parse(price[i+1]);

       yield return Tuple.Create(start, end);
}

var prices=ParsePrices(rawPrices);
IEnumerable<IQueryable<Deal>> partialQueries=prices.Select( interval=>
       from product in db.Products
       where (product.DiscountPrice >= interval.Item1 && product.DiscountPrice <= interval.Item2)
       select product;);
var mergedQuery=partialQueries.Aggregate((q1,q2)=>q1.Union(q2));