重载比较运算符,如何比较两个变量是否指向同一个对象(即不是值)
public static bool operator ==(Landscape a, Landscape b)
{
return a.Width == b.Width && a.Height == b.Height;
}
public static bool operator !=(Landscape a, Landscape b)
{
return !(a.Width == b.Width && a.Height == b.Height);
}
Run Code Online (Sandbox Code Playgroud) 如果我不符合“公众”的资格。在 account_category 表上,out account_category将与 account_category 表名称发生冲突。
是否“公开”。也适用于其他 RDBMS?
CREATE OR REPLACE FUNCTION X_RAIN(x VARCHAR, OUT user_id VARCHAR, out account_category varchar, out depth int) returns setof record
AS
$$
BEGIN
return query
select uar.account_id, c.account_category, c.depth
from account_with_types_chart_of_account uar
inner join public.account_category c using(account_category_id);
END;
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud) 是否有一个魔术函数或运算符来忽略某些标记?
select to_tsvector('the quick. brown fox') @@ 'brown' -- returns true
select to_tsvector('the quick,brown fox') @@ 'brown' -- returns true
select to_tsvector('the quick.brown fox') @@ 'brown' -- returns false, should return true
select to_tsvector('the quick/brown fox') @@ 'brown' -- returns false, should return true
Run Code Online (Sandbox Code Playgroud) 让我说我有
public delegate DataSet AutoCompleteDelegate(
string filter, long rowOffset);
Run Code Online (Sandbox Code Playgroud)
我可以使用以下类来强制执行该方法签名吗?(只是一个想法):
public class MiddleTier
{
[Follow(AutoCompleteDelegate)]
public DataSet Customer_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
[Follow(AutoCompleteDelegate)]
public DataSet Item_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
// this should give compilation error, doesn't follow method signature
[Follow(AutoCompleteDelegate)]
public DataSet BranchOffice_AutoComplete(string filter, string rowOffset)
{
var c = Connect();
// some code here
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]
目的:我已经将属性放在我的middletier的方法中.我有这样的方法:
public abstract …Run Code Online (Sandbox Code Playgroud) 如何比较SQL中的值的等价与null?
对于熟悉C#的人,以下是比较可空值的结果:
null == null : true
null == john : false
null == paul : false
john == null : false
john == john : true
john == paul : false
paul == null : false
paul == john : false
paul == paul : true
Run Code Online (Sandbox Code Playgroud)
我在SQL中找到的最简单的解决方案是将可空字段合并为一些sentinel值(例如'scoobydoo')然后比较它们
coalesce(A, 'scoobydoo') = coalesce(B, 'scoobydoo')
Run Code Online (Sandbox Code Playgroud)
但是,如果有人使用sentinel值,那么这就是普通的kludge,如果A恰好是NULL而B是'scoobydoo',那么上面的表达式会产生真值
这正是我要求上面代码逻辑的目的(T-SQL UPDATE触发器):
-- detect if the value changes
if (select invoice_date from inserted) <>
(select invoice_date from deleted) begin
-- do something to summary tables here …Run Code Online (Sandbox Code Playgroud) 我想做一个有序的datagridview输入.以下代码片段并没有完全消除它; 即使我放了一个grd.Refresh,datagridview也不会显示更新的值.如果我按下向下箭头键并再次上升,网格就会刷新.有没有其他方法可以强制刷新datagridview的内容?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace TestSortedInput
{
public partial class Form1 : Form
{
DataTable _dt = new DataTable();
public Form1()
{
InitializeComponent();
grd.AllowUserToAddRows = false;
_dt.Columns.Add("sort", typeof(int));
_dt.Columns.Add("product", typeof(string));
_dt.DefaultView.Sort = "sort";
grd.DataSource = _dt;
}
private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Insert)
{
if (e.Modifiers == 0)
{
var r = _dt.NewRow();
r["sort"] = _dt.DefaultView.Count + 1;
r["product"] = "";
_dt.Rows.Add(r);
} …Run Code Online (Sandbox Code Playgroud) 第一次采取,kludge解决方案,哨兵方法(你的程序不应该允许输入标记值):
select coalesce(a, -2147483648) = coalesce(b, -2147483648) as is_equal -- a little postgresism
Run Code Online (Sandbox Code Playgroud)
假设您忘记阻止程序上的标记值,用户在B字段上输入-2147483648,A为空.上面的代码报告为true,如果报告为false,则不应报告true或null.
比较可空字段上的相等性最简洁的方法是什么?A == B应仅报告真或假,无论字段是否可为空.
我不能在DataTable上使用AsEnumerable(),我使用的是C#3,但我只是针对2.0框架(LINQ功能是由LINQBridge提供的).有没有什么办法可以在不使用Select()的情况下使DataTable可枚举?
bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);
Run Code Online (Sandbox Code Playgroud)
更新:
我希望它看起来像这样:
bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);
Run Code Online (Sandbox Code Playgroud)
我理解的DataTable的选择方法返回一个副本的端倪,我想只使用AsEnumerable,问题是,我只是针对2.0框架,System.Data.DataSetExtensions不可用
顺便说一句,我试过这个:http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx,但有编译错误.
主要吸引力
我有一个老板(以及用户)希望主键是复杂/智能/有吸引力的控制号码(有点像社会安全号码或信用卡号码格式)
我只是用零填充主键(在视图中)来安抚他们希望使控件编号复杂,智能和有吸引力的愿望.但他们希望它是:前2位的客户端代码,然后4个位数的同比,那么最后4位数字作为交易号该客户端上给定的一年,那么客户的交易数量重置为1的时候,明年流动.每个客户的交易以1开头.例如WM20090001,WM20090002,BB2009001,WM20100001,BB20100001
但是,由于我想尽可能简单,我放弃了他们建议的智能在主键中,我只是保持主键自动增量,无论客户端和年份.但是为了让它看起来不那么沉闷(他们真的坚持把主键作为智能控制号),我让主键看起来很聪明,在查看查询时,我把客户端代码和四位数年份代码放在前面八零填充自动增量键,即WM200900000001.在自动增量主键上排序类似slug的信息.
保持主键自动递增而不管任何其他信息,我们能够在编辑记录时保留其他潜在的副作用问题,例如,如果他们在WM上输入事务时出错,那么他们将客户端代码编辑为BB,如果我们使用智能主键,WM客户的主键在控制数量上会有差距.或者更糟糕的是,而不是让控制数字有差距/孔,用户将要求这些差距的后续记录应该转移达到这些差距,并有后续记录主键重新调整(递减).
PS
新书报价(https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1044961.html):
"如果你第一次用舌头问他们对他们来说是合理的要求,那么事情最终会好起来的."
下面的反射代码返回:
System.Collections.Generic.IList`1[TestReflection.Car] Cars
Run Code Online (Sandbox Code Playgroud)
如何Cars通过反射获得根类型?不IList<Car>- 我怎么能得到Car?
using System;
using System.Reflection;
using System.Collections.Generic;
namespace TestReflection
{
class MainClass
{
public static void Main(string[] args)
{
Type t = typeof(Dealer);
MemberInfo[] mi = t.GetMember("Cars");
Console.WriteLine("{0}", mi[0].ToString());
Console.ReadLine();
}
}
class Dealer
{
public IList<Car> Cars { get; set; }
}
class Car
{
public string CarModel { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud) c# ×6
postgresql ×3
equality ×2
sql ×2
.net ×1
.net-2.0 ×1
ado.net ×1
attributes ×1
compare ×1
comparison ×1
datagridview ×1
datatable ×1
enforcement ×1
enumerable ×1
generics ×1
namespaces ×1
operators ×1
primary-key ×1
reflection ×1
refresh ×1
sorted ×1