根据订单中的值过滤列表?

时间:2015-12-18 19:28:33

标签: c# linq

使用空引用检查过滤值的最简单方法是什么。订单应该像“Active”,                 “重启”,                 “锁定”,                 “暂停”,                 “过期”,                 “禁用”,                 “撤销”

namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            var tempList = new List<string>
            {
                "Active",
                "Reset",
                "Locked",
                "Suspended ",
                "Expired",
                "Disabled ",
                "Revoked"
            };
            var list = new List<MyEntity>
            {
                new MyEntity() {MyValue = "Reset"},
                new MyEntity() {MyValue = "Locked"},
                new MyEntity() {MyValue = "Active"},
                new MyEntity() {MyValue = "Expired"}

            };

            var item =
                list.FirstOrDefault(x => x.MyValue));

        }
    }
    public class MyEntity
    {
        public string MyValue { get; set; }
    }
}

我需要做些什么才能根据值...过滤列表?

1 个答案:

答案 0 :(得分:6)

听起来你想做一个OrderBy,如果你想要首选的是Sam,那么Paul,然后是Jimmy,然后是Jeff,然后null如果没有这些,那么你可以做到以下几点。

var listOfNames = new List<string> { "Sam", "Paul", "Jimmy", "Jeff" };
var item = list.Where(x => listOfNames.Contains(x.MyValue))
    .OrderyBy(x => listOfName.IndexOf(x.MyValue))
    .FirstOrDefault();

这将首先筛选出与您感兴趣的值不匹配的任何内容。然后根据他们在列表中的位置对它们进行排序,最后选择第一个或null如果过滤器没有匹配。

此外,我只是假设MyValue在这里string,但如果您需要,您可以进行任何转换。