如何使用linq-to-entities构建类似selectbyexample的查询?
例如:
public class Person
{
public string Name {get; set;}
public int Age {get; set;}
public string City {get; set;}
}
如果我有一个新的Person(),其值为null的所有属性,查询应该返回Person表的所有记录。
但是如果我传递一个具有Age = 25属性的对象,查询应该返回所有年龄= 25的记录;
我想构建一个单独的查询过滤器来接受任何属性,如果有人将其忽略为null。
答案 0 :(得分:1)
首先,您的示例不能将所有属性设为null,因为Age
不可为空。
无论如何,这样做是这样的:
public static IQueryable<Person> QueryByExample(Person example, YourContext context)
{
var query = context.Persons;
if (example.Name != null)
{
string name = example.Name;
query = query.Where(p => p.Name == name);
}
// Same for other properties
return query;
}
答案 1 :(得分:1)
var p = new Person {Age = 25};
src.Where(el => p.Age == null ? true : el.Age == p.Age)
.Where(el => p.Name == null ? true : el.Name == p.Name)
.Where(el => p.City == null ? true : el.City == p.City);
在你的Person类中,Age应该可以为空(int?而不是int)。
答案 2 :(得分:0)
您需要自定义Linq方法。以下是如何做到这一点:
http://msdn.microsoft.com/en-us/library/cc981895.aspx
这可以帮助您了解如何动态迭代您的类属性
c# - How to iterate through classes fields and set properties