我有3个表(原名为6个,在这里更短),它们都有一个键列,我想使用linq过滤和合并所有这些表。
在这里,我迄今所做的,实际上是有效的,但您会理解我为什么发布这个,因为您看到了下面的代码。
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)的形式返回实体-我觉得它可以。)
发布于 2017-09-12 15:54:59
您可以首先执行投影,然后对所有情况进行合并。投影应该拥有的唯一附加数据是CommanId。您可以使用匿名类型,因此不必只为中间投影创建另一个类。在此之后,您可以只指定一次筛选器,并对MyCustomModel进行最终投影。
例如:
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中,这样就不需要最终的投影和匿名类型。
发布于 2017-09-12 15:56:10
你有两个选择:
1.获取列表
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个不同的副本。
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"
});
});https://stackoverflow.com/questions/46176708
复制相似问题