c# - Linq to Entities:其中包含 1 个值和许多列
问题描述
我知道在 sql 你做这样的事情
WHERE 'val' IN (field1, field2, field3, field4, ...)
我想知道是否有一种方法可以使用 Linq 对实体进行类似的操作?我现在唯一能想到的就是为我想要搜索的字段创建一个巨大的“或”语句,如下所示
.where(m =>
m.field1.Contains('val') ||
m.field2.Contains('val') ||
m.field3.Contains('val') ||
m.field4.Contains('val'));
有没有一种更简洁的方式来编写这个搜索,或者我所拥有的和它一样好?
解决方案
你可以做
.Where(f => new string[] { f.field1, f.field2, f.field3 }.Any(s => s.Contains("val")));
具有您发布的代码的行为,或者
.Where(f => new string[] { f.field1, f.field2, f.field3 }.Contains("val"));
检查是否相等。
但我不能说这是否是一个关于性能的好主意。
以下是代码示例:
public class ClassWithFields
{
public int Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 {get;set;}
}
public class Program
{
public static void Main()
{
var listFields = new List<ClassWithFields>()
{
new ClassWithFields { Id = 1, Field1 = "val", Field2 = "qewr", Field3 = "asdqw" },
new ClassWithFields { Id = 2, Field1 = "asdf", Field2 = "asdd", Field3 = "asdqw" },
new ClassWithFields { Id = 3, Field1 = "asdf", Field2 = "qewr", Field3 = "qwvaleqwe" }
};
var containsVal = listFields.Where(f => new string[] { f.Field1, f.Field2, f.Field3 }.Any(s => s.Contains("val")));
var equalsVal = listFields.Where(f => new string[] { f.Field1, f.Field2, f.Field3 }.Contains("val"));
}
}
推荐阅读
- r - 创建了 R 包,无法显示照片
- php - Laravel Schema 未在存在的列上返回 true
- list - 在 Haskell 中将随机生成的列表作为参数传递
- javascript - .change() 上的下拉选择没有改变
- mysql - 查询具有特定值的最近记录的计数
- node.js - MongoClient在第一次连接时无法连接到服务器,但稍后连接
- python - 我们可以删除或删除字典中任何键的值吗?
- algorithm - 约束最长递增子序列
- r - 使用“过滤器”选项时如何在数据表(DT R 包)中仅显示两位小数?
- mysql - 无法在 express.js 中获取请求的 API