我有一个从同事那里继承来的应用程序,用于跟踪反馈卡。我还有一个表单,可以根据用户输入的过滤器数量来过滤网页上显示的卡片。所有过滤器都工作正常,除了针对反馈详细信息应用的过滤器(服务很好/很差,房间干净/肮脏等)。这些存储在我的卡类中的成员类列表中。
下面是每个类的一组片段。
public class Card {
public long ID { get; set; }
public List<Feedback> feedback { get; set; }
...
}
public class Feedback {
public long ID {get; set; }
...
}
public class CardFilter {
public ICollection<long> FeedBackDetails {get; set; }
...
}
...
public IQueryable<CardType > GetFeedbackQueryable<CardType>(CardFilter filter = null)
where CardType : Card
{
var data = Service.GetRepository<CardType>();
var CardQuery = data.All;
...
if (filter.FeedbackDetails != null && filter.FeedbackDetails.Count != 0)
{
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.All(fbv => filter.FeedbackDetails.Contains(fbv.ID));
}
return cardQuery;
}
...
当我尝试过滤器时:
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.All(fbv => filter.FeedbackDetails.Contains(fbv.ID));
它返回 15 个卡片实例,没有任何反馈。如果我使用过滤器:
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.Any(fbv => filter.FeedbackDetails.Contains(fbv.ID));
尽管我可以查看数据并看到相应的卡片,但什么也没有返回。
我是 LINQ 新手,所以我知道我错过了一些东西。请在这里为我指明正确的方向。
编辑:
为了提供有关此应用程序的更多背景信息,我会更详细一些。卡表/模型包含有关卡和提交卡的人的信息。我的意思是姓名或匿名、地址、被评论的位置以及其他一些基本事实。反馈项目列在另一个表中并显示在网络表单上,用户可以对每个项目进行正面或负面的检查。每个反馈细节都有三个可能的答案; 0(正)、1(负)或无(无答案)。
卡片模型包含所有基本卡片信息以及反馈响应的集合。给我带来麻烦的过滤器是针对该响应集合的。每张卡片可以有 0 到 52 种可能的 react ,这些 react 可能不适用于所有情况,因此我需要查看与特定情况(清洁度等)有关的所有卡片,无论它们是积极的还是消极的。这就是此过滤器的目的。
最佳答案
不能使用 all 语句,该语句的谓词是如果所有值都与 id 相同。
在你的where语句中,这是一个过滤子句,你没有过滤任何东西吗?
您正在将反馈值与 ID 进行比较吗?它们是一样的吗? 您能否发布更多有关的详细信息
也许可以尝试一下:
cardQuery = cardQuery.Where(card => filter. FeedbackDetails.Contains(card. Id/detsils))
.Select(se=> se).Tolist() ;
关于c# - 根据成员对象列表过滤 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515107/