我有两张牌T1
和T2
。
T1
---------
(Name,Value)
T2
---------
(Name,Value)
我尝试根据T1
对Name
进行选择,如果它不存在,请从T2
var T1Row = db.T1.AsNoTracking().Where(s => s.Name == "text1").FirstOrDefault();
if (T1Row == null)
T1Row = db.T2.AsNoTracking().Where(s => s.Name == "text2").FirstOrDefault();
但我得到了Cannot implicitly convert type T2 to T1
。我试图将这两个查询作为一个查询,但我不知道如何。
我是C#编程的新手,所以请保持温和
答案 0 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Running test: test1</p>
<p>ssfafasf</p>
<p>Running test: test2</p>
<p>gsgsddsh</p>
和T1
是不同的类型(即使它们具有完全相同的属性),请考虑使用接口,或选择/投影到公共对象
答案 1 :(得分:0)
这两个查询会产生不同的类型。 您似乎需要DTO个课程。这样,您就可以选择所需格式的数据并返回BLL。
public class NameValueDTO
{
public string Name { get; set; }
public string Value{ get; set; }
}
var T1Row = db.T1.AsNoTracking().Where(s => s.Name == "text1").Select(i => new NameValueDTO { Name = i.Name, Value = i.Value }).FirstOrDefault();
if (T1Row == null)
T1Row = db.T2.AsNoTracking().Where(s => s.Name == "text2").Select(i => new NameValueDTO { Name = i.Name, Value = i.Value }).FirstOrDefault();
答案 2 :(得分:0)
您发现此错误是因为db.T1
和db.T2
是不同的类类型。一种选择是让T1
和T2
使用的两个类实现相同的接口。然后,在声明var
:
T1Row
IMyInterface T1Row = db.T1.AsNoTracking().Where(s => s.Name == "text1").FirstOrDefault(); //both the types in T1 and T2 need to implement this interface.
if (T1Row == null)
T1Row = db.T2.AsNoTracking().Where(s => s.Name == "text2").FirstOrDefault();
答案 3 :(得分:0)
您应该使用Select
函数将T1或T2对象转换为包含属性(名称和值)的对象(也不是T1,也不是T2) )你需要作为回报。