好的,我有两个问题。第一个是,让我们说我有一个名为" EntitiesDefinitions"的EF,其中包含一个名为" stringData"的数据表。其中每个单元格定义为varchar(100),如下所示:
----------------------------------------------
| | column1 | column2 | column3 | ... |
----------------------------------------------
| row1 | "1,2,3,4" | "5,6,7,8" | "9,a,b,c" | ... |
----------------------------------------------
| row2 | "d,e,f,g" | "h,i,j,k" | "l,m,n,o" | ... |
每个单元格包含由逗号分隔的4条信息。所以我想知道的是,如果我有一种方法可以执行Linq搜索(作为示例)第1列中每个单元格的第2条信息?
using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
var v = (from a in ef.stringData where (a.column1... == "e") select a);
}
我知道我可以在每个单元格中生成4列(column1_1,column1_2,... column2_1,column2_2,...),但如果我获得一个包含+250原始列的表格,则无法工作。那么有没有办法进行这样的搜索?
另一个问题也与此有关。回到ASP.NET,我可以使用这样的字符串向我的sql发送查询:
var stringSql = "SELECT * FROM" + "stringData" + "WHERE ([" + "column1" + "] =" + "e" + ")" + "ORDER by ["+ "column1" +"] ASC;"
基本上,我可以定义要搜索的表,给定一个表示该属性/列的字符串值。有没有办法用EF linqs做到这一点?
using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
var v = (from a in ef.stringData where (a.["column1"]... == "e") select a);
}
我对MVC和EF很新,所以我想知道这是否可行。
答案 0 :(得分:0)
根据我对你的问题的理解,如果你确定它总是不为空,你可以试试这个:
var res = ef.stringData.Where(c => c.column1.Split(',')[1] == "e")
对于输入“ef.stringData”的第二个问题,您要查询的表的名称是“stringData”,没有其他方法可以指定表名,或者仅当您要在EF中编写原始SQL查询时
答案 1 :(得分:0)
在Fehintola建议之后,我能够针对这些主题进行更多研究,并且我能够找到两个问题的解决方案。如果有人对此感兴趣,我想出的是:
对于第一个问题,虽然不优雅,但我们可以将数据封装在特定字符/分隔符中,然后我们可以在嵌套搜索中处理搜索结果。例如:
using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
//Data could look like";1;*2*&3#"
var v = (from a in ef.stringData where select a); //to store the table
v = c.Where(f => f.column1.Contains("*2*")) //look for the second value
v = x.Where(f => f.column1.Contains("#4.3#"));//look for the forth value
//Do some other stuff...like sending the data to a table
}
对于第二个问题,您可以像这样进行原始的SQL查询:
string sqlExample = @"SELECT VALUE a FROM ef.stringData AS a WHERE (a.column1 == '*2*')";
var test = ef.CreateQuery<stringData>(sql).AsQueryable();
这是你可以在sqlExample字符串中放置变量来动态构建你的查询,然后你将获得一个可以用来传递给表的IQueryable对象。
我希望这可以帮助将来的某个人,并感谢所有提出建议的人。