使用Linq从方法返回值降序排序

时间:2016-05-04 15:57:57

标签: c# linq

我有一个班级AccountCommList,它有一个属性Media,可以是电话,电子邮件,纸张等。

我需要调用另一个List,其中包含媒体类型Phone是移动版还是固定电话(用0或1表示),另一个列表还有importance属性显示他们认为的顺序应该在表示联系顺序的列表中更高。这是我的代码。

    protected int RetrievePhoneType(string info, string acctNumber)
    {
        int type = xPhoneTypeList.Where(p => p.PhoneNum == info && p.AccountNum == acctNumber).Select(p => p.PhoneType).FirstOrDefault();

        return type;
    }

此代码选择它是单元格还是固定电话,请记住此PhoneTypeList还包含我需要的importance属性。

这是linq声明。

PhoneTypeListInfo xPhoneTypeList = new PhoneTypeListInfo();
AccountCommList commList = new AccountCommList(acct.AccountNumber, "WEBUSER");
AccountCommList cellPhoneList = commList.Where(x=> x.Media == "Phone").Where(x => 1 == RetrievePhoneType(x.Info, acct.AccountNumber)).OrderByDescending(?????).ToList();

我非常确定我需要修改RetrievePhoneType方法,但我不确定如何在commList

中的其他列表中使用linq语句

修改 为后代展示AccountCommList。

public class AccountCommList
    {
        public AccountCommList();

        public string ContactID { get; set; }
        public string Info { get; set; }
        public string Media { get; set; }
    }

编辑2

显示具有重要性属性的PhoneTypeListInfo。

public class PhoneTypeListInfo
{

    public string AccountNum { get; set; }
    public int PhoneType { get; set; }
    public string PhoneNum { get; set; }

    public int Importance { get; set; }

}

2 个答案:

答案 0 :(得分:1)

将返回类型更改为PhoneTypeListInfo。

protected PhoneTypeListInfo RetrievePhoneType(string info, string acctNumber)
{
    var type = xPhoneTypeList
        .Where(p => p.PhoneNum == info && p.AccountNum == acctNumber)
        .FirstOrDefault();
    return type;
}

然后使用LINQ理解语法。因此很容易关联集合。

var cellPhoneList = (from x in commList
                     where x.Media == "Phone"
                     let p = RetrievePhoneType(x.Info, acct.AccountNumber)
                     where 1 == p.PhoneType
                     orderby p.Importance descending
                     select x).ToList();

无论如何,您的方法总是返回第一个找到的对象。所以排序是不可能的。

答案 1 :(得分:0)

.OrderByDescending(p=>p.YourProperty)