0

我正在尝试在 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 公开这一点,但这样做会失去可查询的能力吗?

4

3 回答 3

2

您可以尝试返回

new {MainObj = l, InterestPercentage = (your calculated field)}

或者创建一个与上述结构相似的对象。这将帮助您避免所有属性设置。

于 2013-02-11T04:05:27.967 回答
0

当您通过 OData 公开此查询时,您将不得不重写它以不使用联接。OData 不支持连接,但支持扩展,即在单个请求中获取相关集合。为了能够扩展您的 OData 查询,您需要在元数据中定义相应的关系,即,如果您想使用 ListingKey 作为连接字段从 Properties 和 Interest 获取数据,您将需要基于这些表之间的关系在ListingKey(或引用这两个的另一个表)上。

于 2013-02-11T09:41:00.350 回答
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 { ... };
于 2013-02-11T13:18:13.433 回答