我们有一个具有多个属性的数据对象,映射到相应的数据库表。
public partial class Sources
{
...
public string business_unit { get; set; }
public string booking_point { get; set; }
public string account { get; set; }
...
}
我们尝试通过为每个选定维度创建列表,根据某些运行时决定的输入过滤数据集。请注意,leafList与dimLeaves一样按预期工作。问题是我们无法使用leafList过滤我们的主数据集。
由于我们无法将DB与内存中的项目混合使用,因此我们首先抓取部分数据集并构建内存查询。 我们遇到的问题是从单独的列表中添加Contains,具体取决于运行时选定的属性。
internal void GetSourceTotal(Int16 fiscal_year, Byte fiscal_month, Byte version)
{
using (DataContext db = new DataContext(AppEnvironment.DirectConnectionString))
{
var values = db.GetTable<Sources>();
// full dataset to copy in-memory
var finacQuery = (from s in values
where s.fiscal_year == fiscal_year && s.fiscal_month == fiscal_month && s.period_version == version
select s).ToList();
var dimQuery = (from s in finacQuery
select s);
foreach (KeyValuePair<string, int> dim in MainRibbon.dimensions)
{
var dimLeaves = this.GetType().GetProperty(dim.Key).GetValue(this, null);
if (dimLeaves != null)
{
var leafList = this.ParseTreeDimensions(dimLeaves.ToString(), dim.Value);
// this has no impact on ToList() later down. dim.key is equal to, for example "business_unit"
dimQuery.Where(s => leafList.Contains(s.GetType().GetProperty(dim.Key).Name));
}
}
var test = dimQuery.ToList();
}
}
dimQuery.Where(s => leafList.Contains(s.GetType().GetProperty(dim.Key).Name));
是我们想要帮助的地方。经过大量的搜索,我们还没有找到一个有效的模式。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
Where
不会改变查询,会返回一个新查询,它代表原始查询,但附加了一个过滤器。你现在正在忽略那个返回值而只是扔掉它。