Как да създадем заявка като examplebyexample, използвайки linq-to-entities?
Например:
public class Person
{
public string Name {get; set;}
public int Age {get; set;}
public string City {get; set;}
}
Ако имах нова Лице () с всички свойства със стойности са null, въпросът трябва да ми върне всички записи от таблицата Лице.
Но ако преминем обект с имот Age = 25, заявката трябва да ми върне всички записи с възраст = 25;
Бих искал да създам един филтър за заявки, който да приеме някое от свойствата и ако някой не го пренебрегне.
Отговори:
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);
в класа си за човек, възрастта трябва да бъде нулируема (int? вместо int).
1 за отговор № 2
На първо място вашият пример не може да има всички свойства 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;
}
0 за отговор № 3
Нуждаете се от персонализиран метод Linq. Ето как можете да го направите:
http://msdn.microsoft.com/en-us/library/cc981895.aspx
Това може да ви помогне да ретумирате динамично чрез свойствата на класа си
c # - Как да повтаряме през класовите полета и да настроим свойства