【发布时间】:2016-09-02 21:30:56
【问题描述】:
我有两个结构相同的实体框架模型,它们是使用 Oracle DB 中的 Code First 生成的(2 个“双”表,请不要问为什么,我无法控制 DB)。
我一直在寻找一种使用 Linq 的有效方法,试图避免两次重写相同的查询。
一些例子:
[Table("ORACLE.TABLE1")]
public partial class MyModel1
{
[Key]
[Column(Order = 0)]
[StringLength(3)]
public string field1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(3)]
public string field2 { get; set; }
[Key]
[Column(Order = 2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int field3 { get; set; }
// -- many other fields
}
[Table("ORACLE.TABLE2")]
public partial class MyModel2
{
[Key]
[Column(Order = 0)]
[StringLength(3)]
public string field1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(3)]
public string field2 { get; set; }
[Key]
[Column(Order = 2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int field3 { get; set; }
// -- many other fields, same as above
}
在某个地方,我有:
public virtual DbSet<MyModel1> MyModel1s { get; set; }
public virtual DbSet<MyModel2> MyModel2s { get; set; }
我目前获取数据的简单而丑陋的解决方案是这样的:
var result1 = from t in db.MyModel1s
where t.field1 == myparameter1
&& t.field2 == myparameter2
&& t.field3 == myparameter3
select t;
var result2 = from t in db.MyModel2s
where t.field1 == myparameter1
&& t.field2 == myparameter2
&& t.field3 == myparameter3
select t;
var result = result1.ToList();
...最后...
foreach (var res2 in result2)
{
var m1 = new MyModel1
{
field1 = res2.field1,
field2 = res2.field2,
field3 = res3.field3
};
result.Add(m1);
}
现在result 包含我想要的所有内容。
一定有更好的方法,建议?
【问题讨论】:
标签: c# oracle entity-framework linq