gpt4 book ai didi

entity-framework - Entity Framework + 有条件附加的 Where() 子句

转载 作者:行者123 更新时间:2023-12-04 06:44:49 26 4
gpt4 key购买 nike

这让我发疯。我在这里错过了什么。我正在使用 EF,如果我有如下代码:

using (LexiconEntities ctx = new LexiconEntities())
{
var query = from w in ctx.Words
select new WordEntryDataModel
{
Word = w.Anagram,
NumOfAnagrams = w.NumAnagrams.Value,
Length = w.Length.Value,
...
};

SearchCriterion c1 = new SearchCriterion();
SearchCriterion c2 = new SearchCriterion();

c1.MinValue = 3;
c1.MaxValue = 3;

c2.MinValue = 4;
c2.MaxValue = 4;

query = query.Where(w => w.Length >= c1.MinValue && w.Length <= c1.MaxValue);
query = query.Where(w => w.NumOfAnagrams >= c2.MinValue && w.NumOfAnagrams <= c2.MaxValue);

...
}

当我调试查询时,我得到了正确的结果(8 条记录)。这也可以在 Linqpad 中按预期工作(该死的摇滚)。

但是,如果我将搜索条件构建为一个条件对象列表,并通过如下迭代搜索条件来动态添加 Where() 子句:
  foreach (SearchCriterion c in criteria.SearchCriteria)
{
switch (c.Type)
{
case SearchCriterionType.WordLength:
query = query.Where(w => w.Length >= c.MinValue && w.Length <= c.MaxValue);
break;
case SearchCriterionType.NumberOfAnagrams:
query = query.Where(w => w.NumOfAnagrams >= c.MinValue && w.NumOfAnagrams <= c.MaxValue);
break;
...
case SearchCriterionType.NumberOfVowels:
query = query.Where(w => w.NumOfVowels >= c.MinValue && w.NumOfVowels <= c.MaxValue);
break;
}
}
...

我得到了完全不同(且不正确)的结果。我已经调试了 switch 语句,并且我的搜索条件有两个正确构造的条件对象设置为正确的值。我的查询不喜欢有条件添加的 where 子句。

我究竟做错了什么?

最佳答案

关闭。将 c 分配给循环内的局部变量。另见我的 SO answer here

关于entity-framework - Entity Framework + 有条件附加的 Where() 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com