【发布时间】:2019-03-07 23:30:59
【问题描述】:
问题:只要有相同的“计划”,SQL 中的一行就会被复制到网页上
我已经尝试检查语句的 Where 和 OrderBy,看看这是否会影响重复的原因。我不确定为什么 OrderBy 会创建重复项。我已经对多个用户进行了尝试,并且当他们拥有相同的计划时行为是一致的。
示例如下:
代码(.cs):
var someVariable = DbContext.DbSet<>.Where(
m =>
m.Some_ID == CurrentlyEditingSomeID
).AsQueryable().OrderByDescending(m => m.Start_Date);
这引用了 .aspx 页面中的 ListView,其中包含如下项目:
<td style="width: 20%;"><%# Item.Plan %></td>
<td style="width: 20%;"><%# Item.Start_Date.ToSafeShortDate() %></td>
<td style="width: 20%;"><%# Item.End_Date.ToSafeShortDate() %></td>
LINQ 查询的输出:
SELECT
[Project1].[Field1] AS [Field1],
[Project1].[Field2] AS [Field2],
FROM ( SELECT
[Extent1].[Field1] AS [Field1],
[Extent1].[Field2] AS [Field2],
FROM (SELECT
[VIEW].[Field1] AS [Field1],
[VIEW].[Field2] AS [Field2],
FROM [mWeb].[VIEW] AS [VIEW]) AS [Extent1]
WHERE [Extent1].[Some_ID] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[Start_Date] DESC
(.aspx 文件的较长版本):
<asp:ListView ID="lstPlanE" runat="server" ItemPlaceholderID="litPlanEPlaceHolder"
ItemType="Project.Data.view" SelectMethod="lstPlanE_GetData">
<EmptyDataTemplate>
<div class="alert alert-danger" role="alert">Nothing found</div>
</EmptyDataTemplate>
<LayoutTemplate>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th style="width: 20%;">G</th>
<th style="width: 20%;">G ID</th>
<th style="width: 20%;">Plan</th>
<th style="width: 20%;">Start Date</th>
<th style="width: 20%;">End Date</th>
</tr>
</thead>
<asp:Literal ID="litPlanEPlaceHolder" runat="server" />
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td style="width: 20%;"><%# Item.G_Description %></td>
<% if (isAAA()) %>
<% { %>
<td><%# Item.AAA_G_ID %></td>
<% } %>
<% else %>
<% { %>
<td><%# Item.G_ID %></td>
<% } %>
<td style="width: 20%;"><%# Item.Plan %></td>
<td style="width: 20%;"><%# Item.Start_Date.ToSafeShortDate() %></td>
<td style="width: 20%;"><%# Item.End_Date.ToSafeShortDate() %></td>
</tr>
</ItemTemplate>
</asp:ListView>
(.cs 文件中方法的较长版本):
public IQueryable<MediView.Data.vx_EligibilitySearch> lstPlanE_GetData()
{
try
{
if (isAAA())
{
var someVariable = DbContext.DbSet<>.Where(
m =>
m.Other_ID == CurrentlyEditingOtherID &&
m.Some_Seq == CurrentlyEditingSomeSeqID
).AsQueryable();
return someVariable;
}
else
{
var someVariable = DbContext.DbSet<>.Where(
m =>
m.Some_ID == CurrentlyEditingSomeID
).AsQueryable().OrderByDescending(m => m.Start_Date);
return someVariable;
}
}
catch (Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
return null;
}
public bool isAAA() // Determines if Site is CCC or Other
{
bool isSiteCCC = false;
String browserTab = Properties.Settings.Default.BrowserTab.Trim(); // Gets Site Name from Settings file
if (browserTab.Equals("Some Site Name")) { isSiteCCC = true; }
return isSiteAAA;
}
【问题讨论】:
-
也许您正在重新分配
Item对象,而不是让它循环?从您的第二个 SQL 行的外观来看,情况可能就是这样。如果您发布更多代码,也许会很清楚。 -
我更新了代码和输出。也许它会带来一些启示。
-
您的 linq 调用对我来说看起来不错,因此它应该正确返回所有项目。这会让我同意克里斯托弗的观点。我假设您没有遍历返回的列表,而是两次显示最后一项。同样,如果您可以显示更多代码,它会给我们一个更好的主意。
-
很高兴提供更多代码,什么最有帮助?
-
将评论移至放置代码的潜在答案
标签: c# asp.net sql-server listview duplicates