- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在具有键约束的多个数据集中搜索多个列。搜索功能本身有效,但在应用 .Distinct() 时会返回一个错误,说明它无法找到可比较的键。
public async Task<ActionResult> SearchResults(string q)
{
var SearchResult = from Result in db.comments select Result;
if (!String.IsNullOrEmpty(q))
{
var Found = SearchResult.Where(Result => Result.ticket.summary.ToUpper().Contains(q.ToUpper()) || Result.ticket.main_ticket.Contains(q) || Result.ticket.detailed_description.Contains(q.ToLower()) || Result.ticket.ticket.Contains(q) || Result.comment.Contains(q));
if (Found== null)
{
return Content("No Data.");
}
else
{
ViewBag.SearchCount = Found.Count();
return View(Found.ToList());
}
}
else
{
return Content("404");
}
}
//数据库门票
||------------------------||
|| ticket_id ||
|| summary ||
|| main_ticket ||
|| detailed_description ||
|| ticket ||
|| comment_id ||
||------------------------||
//数据库注释
||---------------||
|| comment_id ||
|| comment ||
|| RowVerison ||
||---------------||
我知道当我搜索字母 T 时它会在 comments.comment、tickets.summary 和 tickets.detail_description 中找到字母 T
如何将返回结果限制为不同的 key 对?
我是否应该根据返回的数据创建一个列表,然后比较列表并只显示 Distinct?
或者有没有更简单的方法让我忽略?
[更新 - 找到解决方案]如果我一直在使用模型而不是连接到 .edmx SQLExpress 服务器表的 Controller ,Andrei 的回答就是解决方案。我建议在使用我的示例之前使用他的示例。
虽然 Distinct 无法导入 Ajax 库并使用 DistinctBy Worked!
using Microsoft.Ajax.Utilities;
我将我的 Where() 行更改为此
var Found = SearchResult.Where(Result => Result.ticket.summary.ToUpper().Contains(q.ToUpper()) || Result.ticket.main_ticket.Contains(q) || Result.ticket.detailed_description.Contains(q.ToLower()) || Result.ticket.ticket.Contains(q) || Result.comment.Contains(q)).DistinctBy(Result => Result.ticket_id).ToList();
并从我的 Return View 中删除了 .ToList()。
return View(Found);
这向我的 ViewBag.SearchCount 返回了正确数量的结果,并且还向我的 Razor View 返回了正确的数据
@model IEnumerable<TICKETS.Controllers.comments>
@{
ViewBag.Title = @ViewBag.SearchCount+ " result(s) for: ";
}
<div class="row">
<div class="col-lg-8">
<div class="panel panel-color panel-info">
<div class="panel-heading">
<h3 class="panel-title">All Results - @ViewBag.SearchCount Result(s) found.</h3>
</div>
<div class="panel-body">
@foreach (var item in Model) {
<h3>
<a data_modal="" href="@Url.Action("Details","TICKETS", new{ @id=item.ticket_id})" id="open_modal">@Html.DisplayFor(modelItem => item.tickets.summary)</a>
</h3>
<p>@item.ticket_id :@Html.DisplayFor(modelItem => item.tickets.start_date) - @Html.DisplayFor(modelItem => item.tickets.end_date)</p>
<p>@Html.DisplayFor(modelItem => item.tickets.detailed_description)</p>
<hr />
}
</div>
</div>
</div>
</div>
最佳答案
C# 不知道如何比较您的结果实例。因此,您需要引入 Result 类实例的显式比较。
您需要实现 IEqualityComparer<Result>
接口(interface)并将此接口(interface)的实例传递给您的 .Distinct(resultEqualityComparer)
打电话。
假设我有一个用户类:
class User
{
public string Id { get; set; }
public string Name { get; set; }
}
这是我比较用户类实例的方式:
class UserEqualityComparer : IEqualityComparer<User>
{
public bool Equals(User user1, User user2)
{
return user1.Id == user2.Id;
}
public int GetHashCode(User user)
{
return user.Id;
}
}
GetHashCode 是一个应该返回唯一的函数 int
不同用户实例的值。 Id
将是理想的,如果你没有它,你将不得不根据你的类属性开发你自己的公式。
用法很简单:
var users = new List<User>();
users.Add(new User { Id = 1, Name = "John" });
users.Add(new User { Id = 1, Name = "Lorem" });
users.Add(new User { Id = 2, Name = "Smith" });
users.Distinct(new UserEqualityComparer());
因此,名称为 Lorem 的用户将从集合中过滤掉。
关于c# - LINQ Select multiple or statement return distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051339/
我有一个包含电子邮件、IP、州、城市、时间戳、ID 列的表 我需要按州分组计算电子邮件和 IP 的不同位置 所以当我运行 MYSQL 查询时, select State, City ,count(di
我试过 select distinct ID from DB.TABLE; 它返回所有记录中的唯一 ID。 select distinct * from DB.TABLE; 它将通过比较所有列
我正在尝试在 Postgresql 中编写一个查询,该查询提取一组有序数据并按不同的字段对其进行过滤。我还需要从同一表行中提取其他几个字段,但需要将它们排除在不同的评估之外。示例: SELECT
我有一个使用以下语句创建的 Postgres 表。该表由另一个服务的数据转储填充。 CREATE TABLE data_table ( date date DEFAULT NULL,
我在一个名为 products 的表中有 4 列 id|p_name| p_img | 1 | Xs | xsmax.png | 2 | Xs | xr.png |
当它的状态仅为"is"时,我想从“num”中选择不同的值,而不是立即包括“否”? 表: +--------+-----+--------+ | id | num | status | +---
全部!今天我有一个棘手的问题要给你,我想使用 select DISTINCT 语句来选择一个需要不同的行,但也在同一个语句中(或者我尝试过的方式?)一个没有的行't/不能区分。我想要的结果是每个类名中
我有一个正在使用 Distinct() 的 linq 查询。如果我只是调用 Distinct() 而没有转换为列表,那么它不会返回不同的列表 - 它仍然包含重复项。 但是,如果我转换为 List 并然
说到性能,我应该使用 .ToList().Distinct() 还是 .Distinct().ToList() ? 两种扩展方法是否生成相同的 SQL 查询? 看起来第二种方法应该表现更好,但这是真的
如何在不支持 SQL Server 2008R2 的 SQL 实现中重写包含标准 IS DISTINCT FROM 和 IS NOT DISTINCT FROM 运算符的表达式? 最佳答案 IS DI
有一张 table (在 HIVE) 示例 - meanalytics.key2_master_ids 该表有 6 列(cmpgn_id、offr_id、exec_id、creatv_id、cmpl_
SELECT * FROM `amc_info` WHERE department =' ( SELECT DISTINCT department ) into outfile = 'Differe
如何在Elasticsearch中计算“不同的平均值”?我有一些这样的非规范化数据: { "record_id" : "100", "cost" : 42 } { "record_id" : "200
关注这个question我有... ID SKU PRODUCT ======================= 1 FOO-23 Orange 2 BAR
我有这个 mysql 查询: SELECT DISTINCT post.postId,hash,previewUrl,lastRetrieved FROM post INNER JOIN (tag a
http://sqlfiddle.com/#!2/37dd94/17 如果我执行 SELECT DISTINCT,我得到的结果与只执行 SELECT 的结果相同。 在查询结果中,您将看到两个包含 Di
我有一列包含空条目,例如此列中的可能值为 None, 1, 2, 3 当我使用 session.query(func.count(distinct(Entry.col))).scalar() 计算列中
这是否可能从表列中选择不同的行并计算单个查询中每个不同字段的重复行 $sql = "SELECT DISTINCT location and COUNT(DISTINCT location)
我在 MySQL 数据库中有一个包含 1100 万行的表。其中一列是个人身份证号码。人们在表中被多次列出,我想知道有多少个唯一的个人 ID 号码。然后创建一个包含这些唯一数字的表格。当我计算列中不同的
我刚刚注意到我的 Informix SQL 列(在同一个表中)的某些 上有些奇怪。当我执行此查询时 SELECT DISTINCT colName FROM myTable 例如,我得到 40 行。但
我是一名优秀的程序员,十分优秀!