我正在尝试在linq中复制以下SQL查询:
Select
l.*,
ISNULL( i.InterestPercentage,0)
as InterestPercentage
FROM properties l
LEFT JOIN interest i on i.ListingKey = l.ListingKey
Where i.userId = {0}
我现在真的没什么好处的。
var results = from l in context.properties
join s in context.interest on l.ListingKey equals s.ListingKey
where s.userId == "";
这会返回一个完整的联接,但我想返回一个附加值InterestPercentage
的属性。我想我可能需要创建一个新对象,它是属性的所有列,并具有InterestPercentage的附加属性。然后添加select new MyObject { tons of property setters }
。
另外,我试图通过Odata公开这个,我会通过这样做失去可查询的能力吗?
答案 0 :(得分:2)
您可以尝试返回
new {MainObj = l, InterestPercentage = (your calculated field)}
或者创建一个具有与上面类似结构的对象。这将帮助您避免所有属性设置。
答案 1 :(得分:0)
当您通过OData公开此查询时,您将不得不重写它以不使用连接。 OData不支持连接,但支持扩展,即在单个请求中获取相关集合。为了能够扩展OData查询,您需要在元数据中定义相应的关系,即如果要使用ListingKey作为连接字段从Properties和Interest获取数据,则需要基于这些表之间的关系在ListingKey(或另一个引用这两个的表)上。
答案 2 :(得分:0)
你没有 使用join
,你可以通过自己的显式连接来模拟连接:
var results = from prp in context.properties
from inr in context.interest // cross join
// your own join phrase
where inr.ListingKey == (prp.InterestPercentage ?? 0)
&& inr.userId == ""
select new { ... };