如何在T-SQL中访问列表中的值?
我有一个循环的SQL语句,并计算值在特定列中出现的次数Table_1
.然后它将所需的值插入到它们的列中,Table_2
或者如果该行不存在,它会添加一个新行并添加必要的数据.
我确切地创建了列表或表,
DECLARE @MyList TABLE (Value NVARCHAR(50))
INSERT INTO @MyList VALUES ('Data1')
INSERT INTO @MyList VALUES ('Data2')
INSERT INTO @MyList VALUES ('Data3')
INSERT INTO @MyList VALUES ('Data4')
INSERT INTO @MyList VALUES ('Data5')
INSERT INTO @MyList VALUES ('Data6')
INSERT INTO @MyList VALUES ('Data7')
INSERT INTO @MyList VALUES ('Data8')
Run Code Online (Sandbox Code Playgroud)
该语句工作正常,但我有所有硬编码,我想添加一些动态数据插入,所以我创建了一个值列表(字符串).现在我无法按照我的方式访问这些值.
这是整个陈述,
DECLARE @cnt INT = 1;
DECLARE @MyList TABLE (Value NVARCHAR(50))
INSERT INTO @MyList VALUES ('Data1')
INSERT INTO @MyList VALUES ('Data2')
INSERT INTO @MyList VALUES ('Data3')
INSERT …
Run Code Online (Sandbox Code Playgroud) 我被困在LINQ查询中,我试图从SQL Table
使用中返回列表记录EntityFramework 6
,而不是获取该列表,我最终得到一个IEnumerable<string[]>
.
这就是我的目标IEnumerable<string[]>
.我有一个column
在table
需要被拆分,然后我测试,以查看是否list
包含这些字符串:表列中的值columnOne
可以是这样"a-b"
还是"b-c"
等,因此使用这种需要s.columnOne.Split('-')
list<string> checkList = new list<string>();
checkList.add("a")
checkList.add("b")
checkList.add("c")
List<Foo> fooList = dbContext.Foos.ToList();
IEnumerable<string[]> items = fooList.Select(s => s.columnOne.Split('-'));
var result = items.SelectMany(x => x)
.Where(s => checkList.Contains(s)).ToList();
Run Code Online (Sandbox Code Playgroud)
上面的工作应该如此,但最后它返回一个列表string
,这不是我需要的.
我试过这个:
List<Foo> fooList = dbContext.Foos.ToList();
var test = fooList.Where(s => s.columnOne.Split('-'));
Run Code Online (Sandbox Code Playgroud)
这就是我遇到错误的地方,因为我最终会尝试返回一个列表<Foo>
,而不是<string>
现在我知道该Where
子句需要返回一个bool
值fooList.Where(s => s.columnOne == "someString"); …
继续沿着MVVM的路径前进,我来到了按钮命令.经过相当多的反复试验后,我终于得到了一个Button_Click
使用命令的工作示例ICommand
.
我的问题是,现在我有一个通用事件,我无法获得点击哪个按钮来应用一些逻辑.在我的例子中,我没有使用任何可以获取Sender
信息的地方.通常如下所示RoutedEventArgs
:
Button button = (Button)sender;
Run Code Online (Sandbox Code Playgroud)
所以这就是我到目前为止所拥有的.
本ICommand
类:
public class CommandHandler : ICommand
{
private Action _action;
private bool _canExecute;
public CommandHandler(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action();
}
}
Run Code Online (Sandbox Code Playgroud)
以及执行操作的代码:
private ICommand _clickCommand;
public ICommand ClickCommand => _clickCommand ?? (_clickCommand = new CommandHandler(MyAction, _canExecute));
public ViewModelBase() …
Run Code Online (Sandbox Code Playgroud) 我已经搜索并来到了一堵砖墙。关于如何做到这一点似乎有很多问题和答案,但我找不到任何我可以具体实施的东西(显然我的理解有问题)。
我希望能够更新几个 Datagrids 并脱离你不应该命名你的控件的前提,我不知道如何让它工作。
所以到目前为止我能够想出的是使用System.Windows.Interactivity
程序集。但我不知道如何实现背后的代码(我当然可以展示我试图让它工作的所有代码,但不幸的是它只会使帖子变得混乱,所以我不包括它)。我尽可能多地研究实施ICommand
.
所以我有 XAML:
<i:Interaction.Triggers>
<i:EventTrigger EventName="RowEditEnding">
<i:InvokeCommandAction Command="{Binding CanExecuteChanged}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
但我似乎无法获得背后的代码,以便能够在RowEditEnding
完成时通知并能够使用新数据更新数据库。
因此,考虑到 MVVM 模型,我该如何触发事件以便更新数据库?
我们都知道,它Skip()
可以忽略收集开始时不需要的记录。
但是Skip()
在收集结束时是否有记录的方法?
您如何不获取集合中的最后一条记录?
还是您必须通过 Take()
即下面的代码,
var collection = MyCollection
var listCount = collection.Count();
var takeList = collection.Take(listCount - 1);
Run Code Online (Sandbox Code Playgroud)
这是排除集合中最后一条记录的唯一方法吗?
将LINQ结果转换为ObservableCollection
Jon Skeet在这个问题上给出了一个很好的答案,但我仍然不能自己做.
对于课程来说仍然是新手,所以我仍然处于学习阶段.
我已经创建了一个LINQ to SQL类,显然有很多自动生成的代码.这是添加类时生成的类的片段,与此问题相关.这显然与命名的DataBase表相关联Staff_Time_TBL
.
public partial class Staff_Time_TBL : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private long _ID;
private System.Nullable<System.DateTime> _Date_Data;
}
Run Code Online (Sandbox Code Playgroud)
我有一个工作类,它可以将我需要的数据输入到Datagrid中,它从两个日期之间以及具有唯一员工编号的工作人员中提取数据.这工作正常,但是当数据直接更新到数据库时,界面中的数据不会更新,请参阅此问题.
internal class DatabaseQueries
{
public static IEnumerable<Staff_Time_TBL> MainTable(DatabaseDataContext database, DateTime fromDate, DateTime toDate, int employeeNumber)
{
return database.Staff_Time_TBLs.Where(staff =>
staff.Date_Data > fromDate &&
staff.Date_Data < toDate &&
staff.Staff_No == employeeNumber);
}
Run Code Online (Sandbox Code Playgroud)
这个答案中的代码是可以理解的,但我不知道foo
需要什么?
var linqResults = foos.Where(f => f.Name == "Widget");
var observable …
Run Code Online (Sandbox Code Playgroud) 我对所搜索的术语的知识有限,因此我进行了尽可能多的搜索,但是我找不到并回答我所追求的问题。
我很惊讶地发现,用数据填充对象Reflection
比使用更快object Initialization
。
为此,我制作了一个测试控制台应用程序。首先是测试班
class TestClass
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
public string PropertyThree { get; set; }
public string PropertyFour { get; set; }
public string PropertyFive { get; set; }
public string PropertySix { get; set; }
public string PropertySeven { get; set; }
public string PropertyEight { get; set; }
public string PropertyNine { get; set; }
public string PropertyTen { …
Run Code Online (Sandbox Code Playgroud) 我在比较时间时遇到问题。
根据我的研究,它很可能是由于没有约会的时间。
我的代码,这dateTime
从数据库中获取一个值。
var getDateTime = sql.Staff_Time_TBLs.Where(p => p.Staff_No ==
SelectedEmployee.Key && p.Date_Data == day).Select(p => p.Time_Data_1).ToList();
DateTime dateTimeGet = Convert.ToDateTime(getDateTime);
Run Code Online (Sandbox Code Playgroud)
dateTimeGet
返回这样的值 "2012/12/12 15:03:00.000"
然后我声明变量来保存时间。
TimeSpan startCompare = TimeSpan.Parse("15:00");
TimeSpan endCompare = TimeSpan.Parse("21:00");
Run Code Online (Sandbox Code Playgroud)
然后比较值比较日期时间
if ((endCompare > dateTimeGet) && (startCompare < dateTimeGet))
{
//match found
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误,
operands cannot be given to to type timespan and datetime
Run Code Online (Sandbox Code Playgroud)
在这种情况下我如何比较时间?
我正在尝试设计一个连接到SQL数据库的高效应用程序,我想知道为每个SQL查询创建SQL连接的优点/缺点是什么,例如,像下面的代码一样,创建一个连接集一次的类你可以在课堂上需要的时候给它打电话.
class SqlQuery
{
SqlConnection Connection = new SqlConnection(@myConnectionString);
public void fillInfoData()
{
SqlCommand updateCommand = new SqlCommand(
@"my sql query", Connection);
Connection.Open();
updateCommand.ExecuteNonQuery();
Connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
或者您应该为每个新查询创建一个新连接?
我知道您可以 Microsoft.Office.Interop.Excel;
在 C# 程序中使用 VBA 命令。
我有接近 10,000 行代码的 VBA,将其转换为 C# 兼容命令是不现实的。它创建一个工作簿并执行数据操作和格式化以根据用户请求进行打印。
有没有办法在 C# 中存储宏并创建一个工作簿,然后我可以按原样运行宏?