我正在使用一个系统,该系统有许多需要显示的存储过程.为每个对象创建实体是不实际的.
是否有可能,我将如何退回DataTable使用ExecuteStoreQuery?
public ObjectResult<DataTable> MethodName(string fileSetName) {
using (var dataContext = new DataContext(_connectionString))
{
var returnDataTable = ((IObjectContextAdapter)dataContext).ObjectContext.ExecuteStoreQuery<DataTable>("SP_NAME","SP_PARAM");
return returnDataTable;
}
Run Code Online (Sandbox Code Playgroud) 我需要"旋转"或"旋转"一组对象.该示例将清除我需要做的事情:
var people = new List<Person>(new[] {
new Person{ Name="Ronnie",Age=25, HairColor="Brown",EyeColor="Blue"},
new Person{ Name="Tina",Age=25, HairColor="Brown",EyeColor="Green"},
new Person{ Name="Lukus",Age=4, HairColor="Blonde",EyeColor="Blue"}
});
DataTable rotatedData = people.Pivot("Name", "Property");
/* Results In:
* ___________________________________________
* Property | Ronnie | Tina | Lukus
* ___________________________________________
* Age | 25 | 25 | 4
* HairColor | Brown | Brown | Blonde
* EyeColor | Blue | Green | Blue
* ____________________________________________
*/
Run Code Online (Sandbox Code Playgroud)
这是我写的代码完成此任务:
/// <summary>Converts an IEnumerable into a pivoted DataTable object.</summary>
/// <param name="collection">The …Run Code Online (Sandbox Code Playgroud) 我需要将LINQ转换为DataTable.
我从StackOverflow中窃取了以下扩展方法:
public static DataTable ToDataTable<T>(this IEnumerable<T> items)
{
var tb = new DataTable(typeof(T).Name);
PropertyInfo[] props =
typeof(T).GetProperties(BindingFlags.Public
| BindingFlags.Instance);
foreach (var prop in props)
{
tb.Columns.Add(prop.Name, prop.PropertyType);
}
foreach (var item in items)
{
var values = new object[props.Length];
for (var i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(item, null);
}
tb.Rows.Add(values);
}
return tb;
}
Run Code Online (Sandbox Code Playgroud)
当表包含空值时,它会抛出异常.(即)
DataSet does not support System.Nullable<>
Run Code Online (Sandbox Code Playgroud)
委托(十进制类型)列包含空值)
在
tb.Columns.Add(prop.Name, prop.PropertyType);
Run Code Online (Sandbox Code Playgroud)
怎么解决?
我对Haskell的简洁和优雅感到震惊.但是我在一个.Net的房子里工作,所以当我能够逃脱它时,我会使用F# - 我可能是全国数百名使用它的人中唯一一个.
ADO.NET或F#是否提供与HDBC一样简洁优雅的东西executeMany?我正在通过真实世界Haskell.在第21章中,它提供了这个例子:
ghci> conn <- connectSqlite3 "test1.db"
ghci> stmt <- prepare conn "INSERT INTO test VALUES (?, ?)"
ghci> executeMany stmt [[toSql 5, toSql "five's nice"], [toSql 6, SqlNull]]
ghci> commit conn
ghci> disconnect conn
Run Code Online (Sandbox Code Playgroud)
我想在我的F#中获得这种优雅和简洁.我已经看到很多关于使用参数化查询以避免SQL注入攻击的炒作.在这种情况下,我没有使用它们有三个原因:
这是我的F#代码:
module Data
open System
open System.Data
open System.Data.OleDb
open System.Text.RegularExpressions
type Period = Prior | Current
let Import period records db =
use conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + db + ";Persist …Run Code Online (Sandbox Code Playgroud) 我有一张桌子,
**Matter No Client No Client Name Invoice No Invoice Date Invoice Amt**
1111-0001 1111 ABC 101 01/01/2013 100.00
1111-0001 1111 ABC 102 02/01/2013 200.00
1111-0001 1111 ABC 103 03/01/2013 300.00
1111-0001 1111 ABC 104 04/01/2013 400.00
1111-0001 1112 DEF 105 05/01/2013 500.00
1111-0001 1113 GHI 106 06/01/2013 600.00
Run Code Online (Sandbox Code Playgroud)
基于上面的场景,我希望返回所有列,但DISTINCT ROWS基于Columns - Matter No和Client No.,即我需要看到3行作为输出:
**Matter No Client No Client Name Invoice No Invoice Date Invoice Amt**
1111-0001 1111 ABC 101 01/01/2013 100.00
1111-0001 1112 DEF 105 05/01/2013 500.00
1111-0001 …Run Code Online (Sandbox Code Playgroud) 我有一个模型,以及我需要复制到数据库中的实例列表(大约5000个).
我正在尝试将我的对象同化为数据表,但我不知道该怎么做:
public class BookingType {
public int ID { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int RandomProperty { get; set; }
public int RandomProperty2 { get; set; }
}
public void InsertSomeStuff(IEnumerable<BookingType> bookings) {
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)) {
conn.Open();
DataTable dt = new DataTable();
using (SqlBulkCopy copy = new SqlBulkCopy(conn)) {
copy.ColumnMappings.Add(0, 1);
copy.DestinationTableName = "dbo.Bookings";
copy.WriteToServer(dt);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我正在使用以下代码
IEnumerable<DataRow> query = from c in at.appointmentcalendars.AsEnumerable()
select c;
DataTable dt = query.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误
无法隐式转换
'System.Collections.Generic.IEnumerable<appointmentcalendar>'为'System.Collections.Generic.IEnumerable<System.Data.DataRow>'.存在显式转换(您是否错过了演员?)
在将其标记为重复之前,我已经看到了许多答案,例如“ 将IEnumerable转换为DataTable”,并试图通过创建扩展方法的方式进行类似的操作。我问我的问题,因为问题可能在其他地方。
从本质上讲,到目前为止,我有相当大的IEnumerable(大约16-17百万个项目),在使用扩展方法尝试转换为数据表之前,我并没有遇到任何问题:
/// <summary>
/// Converts IEnumberable to datatable. Mainly for use when using SQLBulkCopy/>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collection"></param>
/// <param name="customColumnOrder">Custom order for columns allows me to make sure that the order of columns will always be the same. Am open for suggestions for better ways to do this</param>
/// <returns></returns>
public static DataTable ToDataTable<T>(this IEnumerable<T> collection, List<Tuple<string, int, int>> customColumnOrder)
{
DataTable dt = new DataTable();
var type = collection.First().GetType();
foreach (var …Run Code Online (Sandbox Code Playgroud) 我需要在C#上使用公共列合并/连接数据表.
我知道很多例子以及有关同一主题的问题.我没有找到任何回答我的问题.
以下是我正在使用的代码.
该代码仅允许基于on datatable数据的一个公共列.我需要一个公共列,但需要考虑任何其他"帐户#"可以在另一个数据表中使用并将其添加到公共列中.
此外,代码仅允许合并2个数据表.我需要合并31个数据表,以便为每个月的每一天合并1个数据表.
我有一个月的每一天的数据表,dt_docDAY01,dt_docDAY02,dt_docDAY03等.
每个数据表包含一个帐号"帐号#"和一个存储在一列中的余额,参考当天"DAY01","DAY02"等.
你能告诉我如何更改代码,以便我将包括所有表中的所有帐户.
另外,我将如何合并此代码中的所有数据表,所以我不必运行相同的代码31次.
'string id ="帐号#";
var tableJoinedDAY02 = dt_docDAY01_GROUPED.Clone(); // create columns from table1
// add columns from table2 except id
foreach (DataColumn column in dt_docDAY02_GROUPED.Columns)
{
if (column.ColumnName != id)
tableJoinedDAY02.Columns.Add(column.ColumnName, column.DataType);
}
tableJoinedDAY02.BeginLoadData();
foreach (DataRow row1 in dt_docDAY01_GROUPED.Rows)
{
foreach (DataRow row2 in dt_docDAY02_GROUPED.Rows)
{
if (row1.Field<string>(id) == row2.Field<string>(id))
{
var list = row1.ItemArray.ToList(); // items from table1
// add items from table2 except id
foreach (DataColumn column in dt_docDAY02_GROUPED.Columns) …Run Code Online (Sandbox Code Playgroud)