我有以下查询:
var data = (from ftr in db.TB_FTR
join mst in db.TB_MST on ftr.MST_ID equals mst.MST_ID
join trf in db.TB_TRF on mst.TRF_ID equals trf.ID
select new TRFData
{
City = ftr.FTR_CITY,
County = ftr.FTR_COUNTY,
Type = trf.TRF_TYPE
}).ToList();
Run Code Online (Sandbox Code Playgroud)
TB_FTR表包含3,000,000行,TB_MST包含1,100,000行,TB_TRF包含340行.如何使此加入工作?这有诀窍或解决方法吗?谢谢.
由于某些我无法控制的原因,需要定义我的方法来接受一个对象类型的参数。但我知道这个参数的值实际上是 List 类型,带有一个我不知道的泛型参数。
我正在尝试将此对象强制转换为 List<object>,但在不知道确切的泛型参数是什么的情况下不知道如何执行此操作。
我想做这样的事情:
public static List<object> ConvertToList(object input)
{
if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>)))
{
//Of course this does not work, because input might for example be of type List<string>
return (List<object>) input;
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,如果我有List<T>而不是object input,使用它会很容易:
return input.Cast<object>()
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我被对象参数困住了。知道我如何解决这个问题吗?
所以我会有一个带有匹配字段的数据列表:
class Data
{
public string type;
public int amount;
public Data(string type, int amount)
{
this.type = type;
this.amount = amount;
}
}
List<Data> list = new List<Data>()
{
new Data("A", 20),
new Data("A", 10),
new Data("B", 20),
new Data("B", 20),
new Data("C", 20)
};
Run Code Online (Sandbox Code Playgroud)
我希望这些项目合并为一个,如果它们的类型相同,则添加该值。所以我会有“A”=> 30,“B”=> 40 和“C”=> 20。
我可以解决这个问题:
private IEnumerable<Data> MergeDuplicates(IEnumerable<Data> list)
{
Dictionary<string, long> dict = new Dictionary<string, long>();
foreach(Data data in list)
{
if (dict.ContainsKey(data.type))
{
dict[data.type] += data.amount;
continue;
}
dict.Add(data.type, data.amount);
} …Run Code Online (Sandbox Code Playgroud) 因此,我通过创建一个漂亮的数据访问层来享受自己和 C# 带来的乐趣。
我有以下方法将简单表达式转换为 SQL where 子句,但它仅适用于以下内容
var people = DataAccessLayer.SelectAllPeople(x => x.Name == "Donald");
//Do some changes to the list
people[0].Surname = "Jansen"
var m = p.BuildUpdateQuerry(people[0], x => x.PersonID == 1);
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
UPDATE People SET Name='Donald',Surname='Jansen' WHERE (PersonID = 1)
Run Code Online (Sandbox Code Playgroud)
但现在如果我执行以下操作
var m = p.BuildUpdateQuerry(people[0], x => x.PersonID == people[0].PersonID);
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
UPDATE People SET Name='Donald',Surname='Jansen' WHERE (PersonID = value(ReflectionExampleByDonaldJansen.Program+<>c__DisplayClass0).people.get_Item(0).PersonID)
Run Code Online (Sandbox Code Playgroud)
我用来将 Lambda 转换为字符串的方法是
public static string GetWhereClause<T>(Expression<Func<T, bool>> expression)
{
var name = expression.Parameters[0].ToString();
var body = expression.Body.ToString().Replace("\"", "'"); …Run Code Online (Sandbox Code Playgroud) 我试图做非常相似的linq语句,但条件是它们略有不同.现在我只是用小修改重复整个陈述,但这应该更简洁.我所挣扎的是在语句中进行条件groupby和条件选择.我的长版本是:
class data
{
public string year;
public string quarter;
public string month;
public string week;
public string tariff;
public double volume;
public double price;
}
class results
{
public string product_code;
public string tariff;
public double volume;
public double price;
}
class Program
{
public static List<results> aggregationfunction(List<data> inputdata, string tarifftype, string timecategory)
{
List<results> returndata = new List<results>();
if (tarifftype.Equals("daynight") & timecategory.Equals("yearly"))
{
returndata = inputdata.GroupBy(a => new { a.tariff, a.year })
.Select(g => new results { product_code …Run Code Online (Sandbox Code Playgroud) public class kDrinki
{
public int id {get; set;}
public string nazwa { get; set; }
public string skladniki { get; set; }
public string opis { get; set; }
public string sciezka { get; set; }
public kDrinki(int _id, string _nazwa, string _skladniki, string _opis, string _sciezka)
{
id = _id;
nazwa = _nazwa;
skladniki = _skladniki;
opis = _opis;
sciezka = _sciezka;
}
}
Run Code Online (Sandbox Code Playgroud)
我有那门课.我创建了对象的List lst_pDrinkow并添加了一些表单XML.我不知道如何从列表中只找到单个对象(使用对象id而不是列表id)并编辑他的所有数据(不仅仅是单个参数).
我知道我不应该问这个问题,但不管是什么,我都错过了让我疯了!我以前做了很多次,我只能把它放到老年和轻微的衰老.
我有一个类,有两个对象,在构造函数中初始化...
public class EbayFunctions
{
private static ApiContext apiContext = null;
private static List<StoreCategoriesFlattened> storeCategories = new List<StoreCategoriesFlattened>();
public EbayFunctions()
{
ApiContext apiContext = GetApiContext();
List<StoreCategoriesFlattened> storeCategories = GetFlattenedStoreCategories();
}
public string GetStoreCategoryIdForItem(string category)
{
var result = storeCategories.Find(x => x.CCDatabaseMatch == category);
return ""; //Ignore will return a value
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个表单应用程序(测试工具),使用该类和按钮单击我调用方法...
namespace EbayTestHarness
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cmdGetEbayStoreCatID_Click(object sender, EventArgs e)
{
EbayFunctions ebf = new …Run Code Online (Sandbox Code Playgroud) 我正在创建一些生成一些文本的应用程序,但是当我点击我的按钮时,大约需要1或2秒后会显示一些消息框,但我想将其增加到5或6秒.点击按钮时,这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
progressBar1.MarqueeAnimationSpeed = 50;
//my code
// delay here for 5 or 6 sec
MessageBox.Show(id);
pictureBox1.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
那我该怎么做呢?
下面的代码失败了,我想这是因为Remove() - 方法破坏了循环顺序.但是我该如何解决呢?
List<string> test = new List<string>();
List<string> test2 = new List<string>();
test.Add("test");
test.Add("test");
test.Add("test");
test.Add("test");
foreach(string t in test)
{
test2.Add(t);
test.Remove(t);
}
Run Code Online (Sandbox Code Playgroud) 我不是.NET编码器,但我必须更新表格.表单是动态构建的,一些项目具有数量字段.我想将数量的文本框更改为数字1到@ item.MaxAmt的下拉列表(每个项目都有一个允许的最大数量的值).
我如何在.NET/cshtml中编写下拉代码?像这样......
@Html.DropDownList("MaxQty",1-@item.MaxAmt)
Run Code Online (Sandbox Code Playgroud) 我在C#中的DateTime.AddHours方法有问题。我已经注意到,我添加到特定日期/时间的时间更多。我失去的更多的天数/小时数。例如:
DateTime DateOne = DateTime.Now;;
DateTime DateTwo = DateOne.AddHours(438000); // 50 years
Run Code Online (Sandbox Code Playgroud)
我为DateOne课程增加了50年的学习时间,因此我应该得到3/10/2069。
但是,如果打印,DateOne您将得到:3/10/2019,这是当前日期,但是如果打印,DateTwo您将得到:2/25/2069。在50年的变化中损失了10天以上。
一定有问题。我到底在做什么错?
int k=7;
int index1=5;
Run Code Online (Sandbox Code Playgroud)
arrayNames 有11个值.
if (k - index1 > 1)
{
arrayNames1 = arrayNames.GetRange(index1, k);
}
Run Code Online (Sandbox Code Playgroud)
但它会抛出一个错误,因为" 偏移和长度超出了数组的范围,或者计数大于从索引到源集合末尾的元素数量. "
GridViewRow row = GridView1.FooterRow;
string filename = ((FileUpload)row.FindControl("FileUpload1")).FileName.ToString();
string filepath = ((FileUpload)row.FindControl("FileUpload1")).PostedFile.SaveAs(Server.MapPath("~/UploadImages/") + filename;
Run Code Online (Sandbox Code Playgroud)