动态选择LINQ
我有一个这样的查询,但我希望能够动态选择 是否可以使用一个变量来选择,这样就可以使用字符串X=cat之类的值来代替X 然后它会选择所有的猫动态选择LINQ,linq,entity-framework,Linq,Entity Framework,我有一个这样的查询,但我希望能够动态选择 是否可以使用一个变量来选择,这样就可以使用字符串X=cat之类的值来代替X 然后它会选择所有的猫 var Query = from a in db.MyDb where a.Id.Equals(UserId) select a.Animal.X; 如果选定的特性具有相同的类型,则可以执行动态选择 让我们看一个简化的示例: class Animal { public stri
var Query = from a in db.MyDb
where a.Id.Equals(UserId)
select a.Animal.X;
如果选定的特性具有相同的类型,则可以执行动态选择 让我们看一个简化的示例:
class Animal
{
public string Cat { get; set; }
public string Dog { get; set; }
public int PropertyWithDifferentType { get; set; }
}
var animals = new List<Animal>();
animals.Add(new Animal { Cat = "cat", Dog = "a dog",
PropertyWithDifferentType = 42 });
但是,由于类型不同,以下语句将给出编译错误:
var doesNotCompile = animals.Select(a => (selector == 0) ? a.Dog : a.PropertyWithDifferentType);
如果“动态选择”表达式较大,则可能需要为其定义一个函数,如:
Func<string> myPropertySelector(Animal a, int selector) {
switch (selector) {
case 0: return () => a.Dog;
default: return ()=> a.Cat;
}
}
将所有这些放在一起,您的查询可以如下所示:我个人更喜欢方法语法:
var Query = db.MyDb
.Where(a => a.Id == UserId)
.Select(a => myPropertySelector(a.Animal, selector));
我详细回答了一个类似的问题
var result = animals.Select(a => myPropertySelector(a, selector));
var Query = db.MyDb
.Where(a => a.Id == UserId)
.Select(a => myPropertySelector(a.Animal, selector));