相关疑难解决方法(0)

使用Entity Framework ExecuteStoreQuery返回DataTable

我正在使用一个系统,该系统有许多需要显示的存储过程.为每个对象创建实体是不实际的.

是否有可能,我将如何退回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)

stored-procedures entity-framework code-first ef-code-first

14
推荐指数
5
解决办法
7万
查看次数

如何转动IEnumerable <T>

我需要"旋转"或"旋转"一组对象.该示例将清除我需要做的事情:

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)

.net c#

7
推荐指数
1
解决办法
1625
查看次数

Linq to DataSet - 处理空值

我需要将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)

怎么解决?

linq asp.net datatable

5
推荐指数
1
解决办法
2370
查看次数

Haskell HDBC在F#中的优雅?

我对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注入攻击的炒作.在这种情况下,我没有使用它们有三个原因:

  1. 我发现.Net中的参数化查询很丑陋且繁琐.
  2. 我的数据来自公司办公室,因此它(大部分)都是干净的.
  3. 我的表有34列.我鄙视用34列参数化查询的想法.

这是我的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)

ado.net f# haskell hdbc

3
推荐指数
1
解决办法
497
查看次数

LINQ - 基于多个不同的列返回包含表的所有列的行

我有一张桌子,

**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)

c# linq

1
推荐指数
1
解决办法
838
查看次数

将IEnumerable <T>转换为Datatable for SQL批量复制的最佳方法

我有一个模型,以及我需要复制到数据库中的实例列表(大约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)

我该怎么做呢?

c# sql

1
推荐指数
1
解决办法
4098
查看次数

从linq查询中填充数据表

我正在使用以下代码

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>'.存在显式转换(您是否错过了演员?)

c# linq linq-to-dataset

1
推荐指数
1
解决办法
7万
查看次数

从IEnumerable &lt;T&gt;转换为DataTable的有效方法

在将其标记为重复之前,我已经看到了许多答案,例如“ 将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)

.net c# linq datatable

0
推荐指数
1
解决办法
1095
查看次数

如何使用公共列在C#中对2个或更多数据表进行完全外部联接

我需要在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)

c# datatable

0
推荐指数
1
解决办法
1834
查看次数