LINQ语句中的排序无效

LINQ语句中的排序无效,linq,entity-framework,Linq,Entity Framework,在我一直在做的LINQ声明中,我很难得到一些排序。代码如下: public static List<Contact> GetAllTheCusts(string fName, string lName, string middleName, int? customerId, string sort, int pageIndex, int pageSize) { AWEntities entities = Common.Ge

在我一直在做的LINQ声明中,我很难得到一些排序。代码如下:

public static List<Contact> GetAllTheCusts(string fName,
    string lName,
    string middleName,
    int? customerId, 
    string sort, 
    int pageIndex, 
    int pageSize)
{
    AWEntities entities = Common.GetContext();

    int skipCount = pageSize * pageIndex;

    var contacts = entities.Contacts
        .Include("Individuals.Customer")
        .Where(c => customerId.HasValue
                        ? c.Individuals.Any(i => i.CustomerID == customerId.Value)
                        : c.Individuals.Any(i => i.Customer.CustomerID == i.CustomerID))
        .Where(c => string.IsNullOrEmpty(fName) || c.FirstName.Contains(fName))
        .Where(c => string.IsNullOrEmpty(lName) || c.LastName.Contains(lName))
        .Where(c => string.IsNullOrEmpty(middleName) || c.MiddleName.Contains(middleName));
        .Select(c => c);

    IOrderedQueryable<Contact> contactsOrdered = contacts.OrderByDescending(o => o.ContactID);;

    return contactsOrdered.Skip(skipCount).Take(pageSize).ToList();

}
public静态列表获取所有客户(字符串fName,
字符串名称,
字符串名称,
int?客户ID,
字符串排序,
int pageIndex,
内部页面大小)
{
AWEntities entities=Common.GetContext();
int skipCount=页面大小*页面索引;
var contacts=实体。contacts
.包括(“个人.客户”)
.其中(c=>customerId.HasValue
?c.personals.Any(i=>i.CustomerID==CustomerID.Value)
:c.personals.Any(i=>i.Customer.CustomerID==i.CustomerID))
.Where(c=>string.IsNullOrEmpty(fName)| | c.FirstName.Contains(fName))
.Where(c=>string.IsNullOrEmpty(lName)| | c.LastName.Contains(lName))
其中(c=>string.IsNullOrEmpty(middleName)| | c.middleName.Contains(middleName));
.选择(c=>c);
IOrderedQueryable contactsOrdered=contacts.OrderByDescending(o=>o.ContactID);;
返回contactsOrdered.Skip(skipCount).Take(pageSize.ToList();
}
由于某些原因,OrderByDescending方法未执行其角色。有人能帮忙吗


干杯

我想我会在这里发布最后的工作代码。这已成功地将存储过程转换为LINQ to实体:

public static List<Contact> GetCustomersWithContactDetails(string fName, string lName, string middleName, int? customerId, 
        string sort, int pageIndex, int pageSize, out int count)
    {
        AWEntities entities = Common.GetContext();

        int skipCount = pageSize * pageIndex;

        var contacts = entities.Contacts
            .Include("Individuals.Customer")
            .Where(c => customerId.HasValue
                            ? c.Individuals.Any(i => i.CustomerID == customerId.Value)
                            : c.Individuals.Any(i => i.Customer.CustomerID == i.CustomerID))
            .Where(c => string.IsNullOrEmpty(fName) || c.FirstName.Contains(fName))
            .Where(c => string.IsNullOrEmpty(lName) || c.LastName.Contains(lName))
            .Where(c => string.IsNullOrEmpty(middleName) || c.MiddleName.Contains(middleName));

        //  Get ordering based on the "sort" parameter
        var contactsOrdered = GetOrdering(sort, contacts);

        count = contacts.Count();

        return contactsOrdered.Skip(skipCount).Take(pageSize).ToList();
    }

    private static IOrderedQueryable<Contact> GetOrdering(string sort, IQueryable<Contact> contacts)
    {
        IOrderedQueryable<Contact> contactsOrdered;

        if (string.IsNullOrEmpty(sort))
        {
            contactsOrdered = contacts.OrderBy(o => o.LastName);
        }
        else
        {
            SortDirection sortDirection = sort.EndsWith("ASC", StringComparison.Ordinal)
                                              ? SortDirection.asc
                                              : SortDirection.desc;


            switch (sort.Substring(0, sort.IndexOf(' ')))
            {
                case "ContactID":
                    {
                        if (sortDirection == SortDirection.asc)
                        {
                            contactsOrdered = contacts.OrderBy(o => o.ContactID);
                        }
                        else
                        {
                            contactsOrdered = contacts.OrderByDescending(o => o.ContactID);
                        }
                        break;
                    }
                case "LastName":
                    {
                        if (sortDirection == SortDirection.asc)
                        {
                            contactsOrdered = contacts.OrderBy(o => o.LastName);
                        }
                        else
                        {
                            contactsOrdered = contacts.OrderByDescending(o => o.LastName);
                        }
                        break;
                    }
                case "FirstName":
                    {
                        if (sortDirection == SortDirection.asc)
                        {
                            contactsOrdered = contacts.OrderBy(o => o.FirstName);
                        }
                        else
                        {
                            contactsOrdered = contacts.OrderByDescending(o => o.FirstName);
                        }
                        break;
                    }
                case "MiddleName":
                    {
                        if (sortDirection == SortDirection.asc)
                        {
                            contactsOrdered = contacts.OrderBy(o => o.MiddleName);
                        }
                        else
                        {
                            contactsOrdered = contacts.OrderByDescending(o => o.MiddleName);
                        }
                        break;
                    }

                default:
                    {
                        contactsOrdered = contacts.OrderBy(o => o.ContactID);
                        break;
                    }
             }

        }
        return contactsOrdered;
    }
公共静态列表GetCustomerWithContactDetails(字符串fName、字符串lName、字符串middleName、int?customerId、,
字符串排序、int pageIndex、int pageSize、out int计数)
{
AWEntities entities=Common.GetContext();
int skipCount=pageSize*pageIndex;
var contacts=实体。contacts
.包括(“个人.客户”)
.其中(c=>customerId.HasValue
?c.personals.Any(i=>i.CustomerID==CustomerID.Value)
:c.personals.Any(i=>i.Customer.CustomerID==i.CustomerID))
.Where(c=>string.IsNullOrEmpty(fName)| | c.FirstName.Contains(fName))
.Where(c=>string.IsNullOrEmpty(lName)| | c.LastName.Contains(lName))
其中(c=>string.IsNullOrEmpty(middleName)| | c.middleName.Contains(middleName));
//根据“sort”参数获取排序
var contactsOrdered=GetOrdering(排序,联系人);
count=contacts.count();
返回contactsOrdered.Skip(skipCount).Take(pageSize.ToList();
}
私有静态IOrderedQueryable GetOrdering(字符串排序,IQueryable联系人)
{
IOrderedQueryable联系人排序;
if(string.IsNullOrEmpty(sort))
{
contactsOrdered=contacts.OrderBy(o=>o.LastName);
}
其他的
{
SortDirection SortDirection=sort.EndsWith(“ASC”,StringComparison.Ordinal)
?SortDirection.asc
:SortDirection.desc;
开关(sort.Substring(0,sort.IndexOf(“”)))
{
案例“ContactID”:
{
if(sortDirection==sortDirection.asc)
{
contactsOrdered=contacts.OrderBy(o=>o.ContactID);
}
其他的
{
contactsOrdered=contacts.OrderByDescending(o=>o.ContactID);
}
打破
}
案例“LastName”:
{
if(sortDirection==sortDirection.asc)
{
contactsOrdered=contacts.OrderBy(o=>o.LastName);
}
其他的
{
contactsOrdered=contacts.OrderByDescending(o=>o.LastName);
}
打破
}
案例“名字”:
{
if(sortDirection==sortDirection.asc)
{
contactsOrdered=contacts.OrderBy(o=>o.FirstName);
}
其他的
{
contactsOrdered=contacts.OrderByDescending(o=>o.FirstName);
}
打破
}
案例“MiddleName”:
{
if(sortDirection==sortDirection.asc)
{
contactsOrdered=contacts.OrderBy(o=>o.MiddleName);
}
其他的
{
contactsOrdered=contacts.OrderByDescending(o=>o.MiddleName);
}
打破
}
违约:
{
contactsOrdered=contacts.OrderBy(o=>o.ContactID);
打破
}
}
}
返回联系人排序;
}

干杯

。选择(c=>c)这不是很有效。发布一些编译代码怎么样?您至少有一个额外的
这让我想知道您是否试图重写代码以使其看起来更漂亮。你重写的时候还丢失了什么吗?嗨,伙计们,抱歉耽搁了。我没有注意到这些评论。今晚我将发布一些编译代码。我所说的不履行其职责,是指它没有对结果进行排序。