Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态选择LINQ_Linq_Entity Framework - Fatal编程技术网

动态选择LINQ

动态选择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

我有一个这样的查询,但我希望能够动态选择

是否可以使用一个变量来选择,这样就可以使用字符串X=cat之类的值来代替X

然后它会选择所有的猫

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));