【问题标题】:SQL Query to IQueryableSQL 查询到 IQueryable
【发布时间】:2014-09-09 02:18:49
【问题描述】:

我想问一下我是否可以将此 SQL 查询转换为 IQueryable:

SQL 查询:

  SELECT 
    [s].[Id] AS [Id], 
    [s].[PartId] AS [PartId], 
    [s].[Quantity] AS [Quantity], 
    [s].[OfficeId] AS [OfficeId], 
    [s].[StockLocationId] AS [StockLocationId], 
    [s].[StockSubLocationId] AS [StockSubLocationId],
    [p].[Description] AS [PartDescription],
    [p].[StdSellPrice] AS [PartSellPrice]
    FROM [dbo].[Stock] AS [s]
    INNER JOIN [dbo].[Part] AS p ON [p].Id = [s].PartId
    WHERE ([s].[StockLocationId] >= 1) AND ([s].[StockSubLocationId] <= 2)

到目前为止,我已经了解了这个 IQueryable:

var getStockDetails = tempCtx.Stocks.Where(s => s.StockLocationId >= loc && s.StockSubLocationId <= subLoc);

【问题讨论】:

  • locsubloc 是什么?为什么要从常量变成变量?

标签: c# sql sql-server iqueryable


【解决方案1】:
var getStockDetails = 
    from s in tempCtx.Stocks
    join p in tempCtx.Part on s.PartId equals p.Id
    where s.StockLocationId >= 1 and s.StockSubLocationId <= 2
    select new { Id = s.Id, PartId = s.PartId, Quantity = s.Quantity };

只需为要返回的其他列添加选择部分。

【讨论】:

  • 两个答案都是正确的。但是什么应该是最好用的呢?
  • 我必须同意 shree.pat18,选择你喜欢的那个。这两个答案都能完成工作。 :)
  • 好的,谢谢大家。我回答这个是因为它的可读性很强。 @shree.pat18
  • 只是一个问题。你是怎么用 >= 和
  • 我使用了这些,因为这些是您在 SQL 查询中使用的。 WHERE ([s].[StockLocationId] &gt;= 1) AND ([s].[StockSubLocationId] &lt;= 2)我不确定您在数据检索方面真正追求的是什么。
【解决方案2】:

试试这个:

var q = tempCtx.Stocks.
            Join(tempCtx.Parts, x => x.PartID, y => y.ID, (x,y) => new{x=x,y=y}).
            Where(xy=>xy.x.StockLocationID >= 1 && xy.x.StockSubLocationID <= 2).
            Select(xy => new {
                              xy.x.ID, 
                              xy.x.PartID, 
                              xy.x.Quantity, 
                              xy.x.OfficeID, 
                              xy.x.StockLocationID, 
                              xy.x.StockSubLocationID, 
                              xy.y.Description, 
                              xy.y.StdSellPrice});

【讨论】:

  • 两个答案都是正确的。但是什么应该是最好用的呢?
  • 取决于您对什么感到满意。我更喜欢在 C# 中将 LINQ 与 Lambda 一起使用,而不是 SQL 样式的语法。不太确定这对性能很重要,但你最好确认那部分。查看此链接以了解有关此事的更多观点:programmers.stackexchange.com/questions/24940/…
  • 你能给我一个使用多个连接的代码示例吗?
猜你喜欢
  • 2018-09-30
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2015-10-26
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多