[英]C# SQL Statement transformed TO LINQ how can i translate this statement to a working linq
I am having trouble with this I have 3 Data tables i use over and over again which are cached I would like to write a LINQ statement which would do the following is this possible? 我对此有麻烦,我有3次重复使用的数据表,这些数据表被缓存了,我想写一个LINQ语句,这样做可能吗?
T-SQL VERSION: T-SQL版本:
SELECT P.[CID],P.[AID]
,B.[AID], B.[Data], B.[Status], B.[Language]
FROM MY_TABLE_1 P
JOIN
(
SELECT A.[AID], A.[Data], A.[Status], A.[Language] FROM MY_TABLE_2 A
UNION ALL
SELECT B.[AID], B.[Data], B.[Status], B.[Language] FROM MY_TABLE_3 B
) B on P.[AID] = B.[AID]
WHERE B.[Language] = 'EN' OR B.[Language] = 'ANY' AND B.STATUS = 1 AND B.[Language] = 'EN' OR B.[Language] = 'ANY' AND B.STATUS = 1
Then i would like it to create a result set of the following 然后我希望它创建以下结果集
Results: |CID|AID|DATA|STATUS|LANGUAGE 结果: | CID | AID | DATA |状态|语言
Try this: 尝试这个:
from p in Context.MyTable1
join b in Contact.MyTable2.Concat(Contact.MyTable3)
on p.aid equals b.aid
where b.Language == "EN" || b.Language == "ANY"
where b.Status == 1
select new
{
p.CID,
p.AID,
b.Data,
b.Status,
b.Language
};
Don't do it this way. 不要这样
Your two options 您的两个选择
or (and preferred) 或(首选)
You are doing database work in your business logic! 您正在按照业务逻辑进行数据库工作! Use the database for what it was intended. 使用数据库以达到预期的目的。
Make sure you reference System.Data.DataSetExtensions, and use the AsEnumerable() method to use LINQ to DataSets. 确保引用System.Data.DataSetExtensions,并使用AsEnumerable()方法对数据集使用LINQ。
var myTable1 = new [] {
new { CID = "123", AID = 345, Data = 32323, Status = 1, Language = "EN"},
new { CID = "231", AID = 123, Data = 11525, Status = 2, Language = "EN"},
new { CID = "729", AID = 513, Data = 15121, Status = 1, Language = "ANY"},
new { CID = "231", AID = 123, Data = 54421, Status = 2, Language = "EN"}}
.ToDataTable().AsEnumerable();
var myTable2 = new [] {
new { CID = "512", AID = 513, Data = 32323, Status = 1, Language = "ANY"},
new { CID = "444", AID = 123, Data = 11525, Status = 2, Language = "BLAH"},
new { CID = "222", AID = 333, Data = 15121, Status = 1, Language = "ANY"},
new { CID = "111", AID = 345, Data = 54421, Status = 2, Language = "EN"}}
.ToDataTable().AsEnumerable();
var myTable3 = new [] {
new { CID = "888", AID = 123, Data = 32323, Status = 2, Language = "EN"},
new { CID = "494", AID = 333, Data = 11525, Status = 1, Language = "FR"},
new { CID = "202", AID = 513, Data = 15121, Status = 1, Language = "EN"},
new { CID = "101", AID = 345, Data = 54421, Status = 2, Language = "ANY"}}
.ToDataTable().AsEnumerable();
var q = from p in myTable1
join b in myTable2.Union(myTable3) on p.Field<int>("AID") equals b.Field<int>("AID")
where (b.Field<string>("Language") == "EN" || b.Field<string>("Language") == "ANY") && b.Field<int>("Status") == 1
select new
{
CID = p.Field<string>("CID"),
B_AID = p.Field<int>("AID"),
P_AID = b.Field<int>("AID"),
Data = b.Field<int>("Data"),
Status = b.Field<int>("Status"),
Language = b.Field<string>("Language")
};
var table = q.ToDataTable();
I used an extension method you can find here to test this, it's pretty useful if you are doing a lot of LINQ over DataTables. 我使用了一种扩展方法,可以在此处进行测试,如果您在DataTables上执行大量的LINQ,这将非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.