首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义模型的LINQ查询联合表

自定义模型的LINQ查询联合表
EN

Stack Overflow用户
提问于 2017-09-12 12:42:49
回答 2查看 278关注 0票数 0

我有3个表(原名为6个,在这里更短),它们都有一个键列,我想使用linq过滤和合并所有这些表。

在这里,我迄今所做的,实际上是有效的,但您会理解我为什么发布这个,因为您看到了下面的代码。

代码语言:javascript
复制
        var query = (from icr in ictetkikRadyoloji
                                 where icr.CommanId == userId                                 
                                select new MyCustomModel
                                 {

                                     ID = icr.ID,
                                     IstemTarihi = icr.IstemTarihi,
                                     Laboratuvar = icr.Laboratuvar,
                                     Sonuc = icr.Sonuc,
                                     HastaGuid = "-",
                                     Type_ = "1"
                                 }).Union(from icb in ictetkikBakteriyoloji
                                          where icb.CommanId == userId                                      select new MyCustomModel
                                          {

                                              ID = icb.ID,
                                              IstemTarihi = icb.IstemTarihi,
                                              Laboratuvar = icb.Laboratuvar,
                                              Sonuc = "-",
                                              HastaGuid ="someGuid",
                                              Type_ = "2"
                                          }).Union(from icbk in ictetkikBiyokimya
                                                   where icbk.CommanId == userId                                               select new MyCustomModel
                                                   {

                                                       ID = icbk.ID,
                                                       IstemTarihi = DateTime.Now,
                                                       Laboratuvar = icbk.Laboratuvar,
                                                       Sonuc = "-",
                                                       HastaGuid ="SomeGuid",
                                                       Type_ = "3"
                                                   });

你可以看到它的起源是如此丑陋和丑陋:(我如何才能使它变得更美,因为它们都以特定模型(MyCustomModel)的形式返回实体-我觉得它可以。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-12 15:54:59

您可以首先执行投影,然后对所有情况进行合并。投影应该拥有的唯一附加数据是CommanId。您可以使用匿名类型,因此不必只为中间投影创建另一个类。在此之后,您可以只指定一次筛选器,并对MyCustomModel进行最终投影。

例如:

代码语言:javascript
复制
var unionQuery = (from icr in ictetkikRadyoloji
                    select new 
                    {
                        ID = icr.ID,
                        IstemTarihi = icr.IstemTarihi,
                        Laboratuvar = icr.Laboratuvar,
                        Sonuc = icr.Sonuc,
                        HastaGuid = "-",
                        Type_ = "1",
                        CommanId = icr.CommanId
                    }).Union(
                    (from icb in ictetkikBakteriyoloji
                    select new
                    {

                        ID = icb.ID,
                        IstemTarihi = icb.IstemTarihi,
                        Laboratuvar = icb.Laboratuvar,
                        Sonuc = "-",
                        HastaGuid = "someGuid",
                        Type_ = "2",
                        CommanId = icb.CommanId
                    })).Union(
                    (from icbk in ictetkikBiyokimya
                    select new
                    {

                        ID = icbk.ID,
                        IstemTarihi = DateTime.Now,
                        Laboratuvar = icbk.Laboratuvar,
                        Sonuc = "-",
                        HastaGuid = "SomeGuid",
                        Type_ = "3",
                        CommanId = icbk.CommanId
                    }));

var query = from i in unionQuery
            where i.CommanId = userId
            select new MyCustomModel
            {
                ID = i.ID,
                IstemTarihi = i.IstemTarihi,
                Laboratuvar = i.Laboratuvar,
                Sonuc = "-",
                HastaGuid = "SomeGuid",
                Type_ = "3",
            };

或者,您可以将属性CommanId添加到MyCustomModel中,这样就不需要最终的投影和匿名类型。

票数 2
EN

Stack Overflow用户

发布于 2017-09-12 15:56:10

你有两个选择:

1.获取列表

代码语言:javascript
复制
            var query = (from icr in ictetkikRadyoloji
            where icr.CommanId == userId
            select new List<MyCustomModel>()
            {
                new MyCustomModel()
                {

                    ID = icr.ID,
                    IstemTarihi = icr.IstemTarihi,
                    Laboratuvar = icr.Laboratuvar,
                    Sonuc = icr.Sonuc,
                    HastaGuid = "-",
                    Type_ = "1"
                },
               new MyCustomModel
               {

                   ID = icb.ID,
                   IstemTarihi = icb.IstemTarihi,
                   Laboratuvar = icb.Laboratuvar,
                   Sonuc = "-",
                   HastaGuid = "someGuid",
                   Type_ = "2"
               },
               new MyCustomModel
               {

                   ID = icbk.ID,
                   IstemTarihi = DateTime.Now,
                   Laboratuvar = icbk.Laboratuvar,
                   Sonuc = "-",
                   HastaGuid = "SomeGuid",
                   Type_ = "3"
               }
            });

2.通过对象使用循环

将对象加载到内存中,并对每个对象创建3个不同的副本。

代码语言:javascript
复制
        var result = new List<MyCustomModel>();
        var query = (from icr in ictetkikRadyoloji
                where icr.CommanId == userId
                select icr)
            .ToList()
            .ForEach(x =>
            {
                result.Add(new MyCustomModel()
                {

                    ID = icr.ID,
                    IstemTarihi = icr.IstemTarihi,
                    Laboratuvar = icr.Laboratuvar,
                    Sonuc = icr.Sonuc,
                    HastaGuid = "-",
                    Type_ = "1"
                });

                result.Add(new MyCustomModel()
                {

                    ID = icr.ID,
                    IstemTarihi = icr.IstemTarihi,
                    Laboratuvar = icr.Laboratuvar,
                    Sonuc = "-",
                    HastaGuid = "someGuid",
                    Type_ = "2"
                });

                result.Add(new MyCustomModel()
                {

                    ID = icr.ID,
                    IstemTarihi = DateTime.Now,
                    Laboratuvar = icr.Laboratuvar,
                    Sonuc = "-",
                    HastaGuid = "SomeGuid",
                    Type_ = "3"
                });

            });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46176708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档