如何比较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"的空常数值。在此上下文中只支持实体类型、枚举类型或基本类型。
我的代码有什么问题,我怎样才能做得更好?
您可以做的是简化您的查询,以便将其转换为SQL。此外,您应该将其拆分为两个单独的查询,用于您试图解决的两个单独的情况:
- 按标签集过滤
- 如果没有提供标签则不进行过滤。
你可以这样做:
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.
}