【问题标题】:Divide in a Linq to SQL query划分一个 Linq to SQL 查询
【发布时间】:2012-11-03 03:11:42
【问题描述】:

我如何在 SQL 中为这段代码形成一个 Linq to sql 查询,我尝试了几件事。这是我的基本代码:

List<Movie> movies =
(from item in db.Movies select item).ToList<Movie>();
return movies;

这就是我想要的结果。

select (Won/Total) as 'rankPercentage'
from dbo.Filmranking
order by rankPercentage desc

谢谢

【问题讨论】:

  • FilmRanking 看起来像是一个单独的表格。它是如何连接到 Movies 表的?
  • 您可以假设表中的字段为“id”、“name”、“won”、“total”。它的目的是划分两列并为其创建一个新列,就像在 SQL 中一样。这在 ASP 中可行吗?

标签: asp.net sql linq linq-to-sql


【解决方案1】:
var movies =
    (from items in db.Movies
    select new { RankPercentage = item.Won / item.Total })
    .ToList();

此时,电影将是 List&lt;T&gt;,其中 T 是浮点数或整数,具体取决于底层 SQL 类型(我无法从您的问题中辨别出)。如果您真的想将其投影回 List&lt;Movie&gt;,则需要将其投影如下,但您的结果不太可能与您的 SQL 表匹配。

List<OtherMovieType> movies = 
    (from items in db.Movies 
     select new OtherMovieType() {
         Name = item.Name,
         RankPercentage = item.Won / item.Total
         })
       .ToList();

【讨论】:

  • andleer,如果我错了,请纠正我,但我认为你不能从你正在检索的上下文中投射相同的实体类型,我认为你会有一个引用问题加上一个上下文同步,至少这是我的印象。
  • 我在回答中说过。 “如果您真的想将其投影为 List,则需要按如下方式进行投影,但您的结果不太可能与您的 SQL 表匹配”。将更新代码以更好地指出这一点。
【解决方案2】:

你需要一个叫做投影的东西,像这样:

var result = db.Movies
             .Select(x => new { title=x.Title, rank = (x.Won/x.Total) })
             .OrderBy(x => x.rank);

编辑也许您希望标题来识别您的记录:)

【讨论】:

    【解决方案3】:
    item.Won / db.Awards.Count
    

    计数是一个属性吗?我认为是。

    【讨论】:

    • 或者可能是 x.Count() 而 x.Length 是属性。
    • 1 / 2 返回 0.5 还是整数?
    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多