如何比较List在EntityFramework中使用数据

本文关键字:EntityFramework 数据 string 何比较 比较 List | 更新日期: 2023-09-27 17:51:20

        string searchByTags = "politics, economy";
        char[] delimiters = new[] { ',', ';', ' ', '#' };  // List of your delimiters
        List<string> providedTags = null;
        if (searchByTags != null)
        {
            providedTags = searchByTags.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
        ViewNotesVM vnVM = new ViewNotesVM();
        vnVM.Quotes = db.SavedQuotes.Where(s => s.Tags.Any(x => (searchByTags != null) ? providedTags.Any(y => y == x.Name) : true)).ToList();

所有"SavedQuotes"都有一些"Tags"。这是一个简单的类,名为"Tag",具有"Name"属性。它被存储在SavedQuotes中作为iccollection。

我想做的,是显示所有的"SavedQuotes"从数据库中,有标签在"searchByTags"变量。

但是我的代码有一些问题。Visual Studio显示错误:

无法创建类型为"System.Collections.Generic.List"的空常数值。在此上下文中只支持实体类型、枚举类型或基本类型。

我的代码有什么问题,我怎样才能做得更好?

如何比较List<string>在EntityFramework中使用数据

您可以做的是简化您的查询,以便将其转换为SQL。此外,您应该将其拆分为两个单独的查询,用于您试图解决的两个单独的情况:

  1. 按标签集过滤
  2. 如果没有提供标签则不进行过滤。

你可以这样做:

private static readonly _emptyTags = new List<string>();
// ...
// Get list with applicable tags.
List<string> providedTags = (searchByTags != null)
    ? providedTags = searchByTags.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).ToList();
    : _emptyTags;
// ...
// Split based on whether any tags were provided as a filter.
if (providedTags.Length > 0)
{
    // Filter by tags
    vnVM.Quotes = db.SavedQuotes
        .Where(s => s.Tags.Any(t => providedTags.Contains(t.Name)))
        .ToList();
}
else 
{
    // Get them all
    vnVM.Quotes = db.SavedQuotes.ToList(); // note: unbounded result set.
}