generalize在EF5中选择LINQ to Entities的方法

时间:2013-11-03 17:55:14

标签: c# linq

我有很多交叉链接表,其中两个链接列链接到父表,例如:

CREATE TABLE [dbo].[InsuranceDocuments]
(
    [InsuranceDocumentId] [bigint] IDENTITY(1,1) NOT NULL,
    [InsuranceId] [bigint] NOT NULL,
    [DocumentId] [bigint] NOT NULL
)

CREATE TABLE [dbo].[PersonDocuments]
(
    [PersonDocumentId] [bigint] IDENTITY(1,1) NOT NULL,
    [PersonId] [bigint] NOT NULL,
    [DocumentId] [bigint] NOT NULL
)

1)InsuranceId链接到Insurances表

2)PersonId链接到人员表

3)DocumentId链接到Documents表

在“人员详细信息”或“保险详细信息”等屏幕上,只需要显示文档信息 在初始加载时,所以我的“文档列表”结构对于所有这样的情况都是相同的。文件表 定义我将省略(太大)但它有基本的东西,如Path,DocumentCategoryId等。

这是我的人员和保险文件的LINQ:

 public IEnumerable<Models.SearchResult.Document> GetInsuranceDocuments(long parentId)
        {

            using (var db = Core.GetDb())
            {

                var items = db.InsuranceDocuments.Where(a => a.InsuranceId == parentId)
                    .Select(a => new Models.SearchResult.Document
                    {
                        CategoryId = a.Document.DocumentCategoryId,
                        TypeId = a.Document.DocumentTypeId,
                        CreateDate = a.CreateDate,
                        Name = (a.Document.DocumentName == null ? a.Document.DocumentPath : a.Document.DocumentName)

                    }).OrderBy(a=>a.Name).ToArray();
                return items;
            }

        }

 public IEnumerable<Models.SearchResult.Document> GetPersonDocuments(long parentId)
        {

            using (var db = Core.GetDb())
            {

                var items = db.PersonDocuments.Where(a => a.PersonId == parentId)
                    .Select(a => new Models.SearchResult.Document
                    {
                        CategoryId = a.Document.DocumentCategoryId,
                        TypeId = a.Document.DocumentTypeId,
                        CreateDate = a.CreateDate,
                        Name = (a.Document.DocumentName == null ? a.Document.DocumentPath : a.Document.DocumentName)

                    }).OrderBy(a=>a.Name).ToArray();
                return items;
            }
    }

如您所见,Select方法对于两者都是相同的 并且很好地概括那部分,需要帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

提取方法并使用它

public Models.SearchResult.Document[] GetDocumentsArray(IQueryable<Models.SearchResult.Document> docs)
{
     return docs.Select(a => new Models.SearchResult.Document
                    {
                        CategoryId = a.Document.DocumentCategoryId,
                        TypeId = a.Document.DocumentTypeId,
                        CreateDate = a.CreateDate,
                        Name = (a.Document.DocumentName == null ? a.Document.DocumentPath : a.Document.DocumentName)

                    }).OrderBy(a=>a.Name).ToArray();
}
使用

var items = GetDocumentsArray(db.PersonDocuments.Where(a => a.PersonId == parentId));