如何在Dynamic Linq中使用Enums?

ser*_*hio 8 .net c# linq dynamic-linq

我想在动态LINQ查询中使用枚举.

是否可能,如果,如何?

考虑下面的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Room aRoom = new Room() { Name = "a Room" };
            Room bRoom = new Room() { Name = "b Room" };
            Room cRoom = new Room() { Name = "c Room" };

            House myHouse = new House
            {
                Rooms = new List<Room>(new Room[] { aRoom }),
                MainRoom = aRoom
            };
            House yourHouse = new House()
            {
                Rooms = new List<Room>(new Room[] { bRoom, cRoom }),
                MainRoom = bRoom
            };
            House donaldsHouse = new House()
            {
                Rooms = new List<Room>(new Room[] { aRoom, bRoom, cRoom }),
                MainRoom = aRoom
            };

            var houses = new List<House>(new House[] { myHouse, yourHouse, donaldsHouse });

            // MainRoom.Name = \"a Room\" and Rooms.Count = 3 or 
            // ?????????????????????????
            var aRoomsHouses = houses.AsQueryable<House>().Where("MainRoom.Type = \"RoomType.Kitchen\"");

            Console.WriteLine("aRoomsHouses count = {0}", aRoomsHouses.Count());
            Console.ReadKey();
        }
    }

    public class House
    {
        public string Address { get; set; }
        public double Area { get; set; }
        public Room MainRoom { get; set; }
        public List<Room> Rooms { get; set; }
    }

    public class Room
    {
        public double Area { get; set; }
        public string Name { get; set; }
        public RoomType Type { get; set; }
    }

    public enum RoomType
    {
        Kitchen,
        Bedroom,
        Library,
        Office
    }
}
Run Code Online (Sandbox Code Playgroud)

Moh*_*mad 17

我遇到了同样的问题并尝试了@Steve Wilkes指定的标记答案,但它对我不起作用!! 然后我发现动态LINQ在同一个包中有一个HTML文档,它提到可以将Enums指定为String Literals.

houses.AsQueryable<House>().Where("MainRoom.Type = \"Kitchen\"")
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 谢谢!以上都没有工作,但使用枚举值名称作为文字工作很好. (2认同)

Ste*_*kes 4

这有效:

houses.AsQueryable<House>()
    .Where("MainRoom.Type = ConsoleApplication2.RoomType.Kitchen")
Run Code Online (Sandbox Code Playgroud)