干涸的LINQ to SQL代码(在特定的排序依据)

可以说,我有一个表称为Projects在我的SQL服务器。 我的dbml文件的Project对象,我用我的MVC应用程序的多个视图的项目清单。

事情是:订货。

默认情况下,你使用LINQ的项目由ID排序。

可以说,我希望他们通过有序的Name由然后Code

_db.Projects.Ordery(q=>q.Name).ThenBy(q=>q.Code)

容易。

现在,我使用的项目,这个名单中的几个观点,与在不同的语句Where子句。

无论我需要添加相同.Ordery(q=>q.Name).ThenBy(q=>q.Code)

这是不干燥。

如果我要首先改变以使其code由当时name我需要改变,在几个地方。

什么是我的问题:我怎么干起了排序。 我怎么会有1的地方,在那里我定义如何项目清单的顺序应该做的。

我肯定不能是先用这样的问题。 提示将非常欢迎。

--------------解决方案-------------

你可以很容易地编写自己的扩展方法(甚至是正常的方法)来做到这一点:

public static IQueryable<Project> InStandardOrder
(this IQueryable<Project> source)
{
return source.OrderBy(q => q.Name).ThenBy(q => q.Code);
}

然后只需使用:

_db.Projects.InStandardOrder()

只要你喜欢,但一个扩展类可以创建适用于IEnumerable的,这可能不是干。

该方法通过将名字,那么代码订购。

public static IEnumerable<Project> DefaultOrder(this IEnumerable<Project> products){
return projects.OrderBy(p => p.Name).ThenBy(p => p.Code);
}

然后,只需呼吁_db.Projects扩展

编辑:只注意到乔恩斯基特打我的印记!

使用存储库模式。 为每个查询给定实体的储存库的方法。

public class OrderRepository
{
public IEnumerable<Project> GetProjects()
{
return projects.OrderBy(p=> p.Name).ThenBy(p=>p.Code);
}

public IEnumerable<Project> GetProjectsByID(int id)
{
return GetProjects().Where(p=>p.Id=id);
}
}

这样,你就不会被重复自己。

为了使它完全地通用的:

public interface IOrderByNameOnly
{
string Name { get; set; }
}
public interface IOrderByNameAndCode : IOrderByNameOnly
{
int Code { get; set; }
}

public static class OrderbyExtension
{
public static IEnumerable<T> OrderByNameAndCode<T>(this IEnumerable<T> source)
where T : IOrderByNameAndCode
{
return source.OrderBy(q => q.Name).ThenBy(q => q.Code);
}
public static IEnumerable<T> OrderByName<T>(this IEnumerable<T> source)
where T : IOrderByNameOnly
{
return source.OrderBy(q => q.Name);
}
}

public class Person : IOrderByNameOnly
{
public string Name { get; set; }
}
public class Company : IOrderByNameAndCode
{
public int Code { get; set; }
public string Name { get; set; }
}

public class SomeClass
{

void SomeMethod()
{
var persons = new List<Person>();
var companies = new List<Company>();

persons.OrderByName();

companies.OrderByName();
companies.OrderByNameAndCode();

}
}

分类:LINQ to SQL的 时间:2012-04-19 人气:0
本文关键词: LINQ to SQL的,干的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.611 (s). 10 q(s)